UESTCOJ 自定义斐波拉且数列中的数能否被3整除
程序员文章站
2024-03-18 16:57:34
...
题目描述
思路
设数列
对应除以3后的余数为
那么,很容易想到在情况下,用打表找规律的方法
a,b分别会有三种余数值(0,1,2),那么a,b的情况就会有种,打表观察后发现:
1、如果
2、如果
代码
#include<bits/stdc++.h>
#define N 100
using namespace std;
int fib(int a,int b,int n){
if(n==0) return a;
if(n==1) return b;
else return fib(a,b,n-1)+fib(a,b,n-2);
}
int main(){
int T;
cin>>T;
while(T--){
int a,b,m,n;
cin>>a>>b>>m;
int t;
//a b都是3的倍数时,输入任意n输出Yes
if(a%3==0&&b%3==0){
while(m--){
cin>>n;
cout<<"Yes"<<endl;
}
}else{
//找出成立的第一项下标,下标每增加4,成立一次
for(int i=0;i<N;i++){
if(fib(a,b,i)%3==0){
t=i;
break;
}
}
while(m--){
cin>>n;
if((n-t)%4==0) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
}
cout<<endl;
}
return 0;
}
2
10 14 9
0
No
1
No
2
Yes
4
No
5
No
325684
No
2569853
No
987654321
No
999999999
No
6 13 3
7
No
589
No
125328936
Yes
--------------------------------
上一篇: 1.3 与Linux交互
下一篇: C++学习笔记 —— 回合制小游戏案例