(a+b+c+···+)%n=(a%n+b%n+···)%n.
| |||
Description | |||
菲波那契数大家可能都已经很熟悉了:f(1)=0 f(2)=1 f(n)=f(n-1)+f(n-2) n>2 因此,当需要其除以某个数的余数时,不妨加一些处理就可以得到。 | |||
Input | |||
输入数据为一些整数对P、K,P(1<P<5000)表示菲波那契数的序号,K(1<=K<15)表示2的幂次方。遇到两个空格隔开的0时表示结束处理。 | |||
Output | |||
输出其第P个菲波那契数除以2的K次方的余数。 | |||
Sample Input | |||
6 2 20 10 0 0 | |||
Sample Output | |||
1 85 1 #include<stdio.h> 2 #define MAX 5010 3 int s[MAX]; 4 int mult(int k); 5 int main() 6 { 7 int p,k; 8 int i; 9 while(scanf("%d%d",&p,&k),(p||k)) 10 { 11 s[1]=0;s[2]=1; 12 for(i=3;i<=p;i++) 13 { 14 s[i]=s[i-1]%mult(k)+s[i-2]%mult(k); 15 } 16 printf("%d\n",s[p]%mult(k)); 17 } 18 return 0; 19 } 20 int mult(int k) 21 { 22 int i,s; 23 s=1; 24 for(i=1;i<=k;i++) 25 s*=2; 26 return s;
|