Problem G: 求余数
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 2437 Solved: 666
Description
现在有n(1 <= n <= 4000000000 )个数按递推排列,其中第一个数是0,第二个数是2,并且从第二个数起每个数的三倍都等于前后两个数之和。问第n个数被6除所得的余数是多少?
Input
先输入一个整数t,表示有t组测试数据,然后是t行,每行输入一个整数n
Output
对于每组数据输出1行,输出余数
Sample Input
2 1 2
Sample Output
0 2
HINT
第一眼看过去这道题数据就太大了,输入用字符用atoi转的话也是放不下。其实这道题数据太庞大并且是递推的话优先找规律,这题考点不太会在数据存放。
我们来看 0 2 6 16 42 110 288 754 这8个按递推出来的数据%6会是什么结果
0 2 0 4 0 2 0 4 是不是和初中做过的规律题很像?这样就可以代码实现了。
代码:
#include<stdio.h>
int a[5]={0,0,2,0,4};
int main(void)
{
long long int n;int t;
while(scanf("%d",&t)!=EOF)
{
for(int i=0;i<t;i++)
{
scanf("%lld",&n);
if(n%4==0)
printf("4\n");
else if(n%4!=0)
printf("%d\n",a[n%4]);
}
}
return 0;
}