菲波那契数大家可能都已经很熟悉了: 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
#include<stdio.h>
#include<stdlib.h>
#define MAX 20
int fibonacci(int n)
{
int i,s3,s1=1,s2=1;
if(n<=1)return 1;
for(i=2;i<=n;i++){
s3=s1+s2;
s1=s2;
s2=s3;
}
return s3;
}
int mishu(int m)
{
int i,s=1;
if(m==0)s=1;
else if(m>=1){
for(i=1;i<=m;i++){
s=s*2;
}
}
return s;
}
void main()
{
int p[MAX],k[MAX],j,i=0;
int y;
printf("请分别输入菲波那契数的序号(1<P<5000)与2的K次方的k值(1<=K<15)(输入0 0结束处理):\n ");
while(1){
scanf("%d %d\n",&p[i++],&k[i++]);
if(p==0&&k==0)break;
}j=i;
for(i=0;i<j;i++){
if(p[i]>1&&p[i]<5000&&k[i]>=1&&k[i]<15){
y=fibonacci(p[i])%mishu(k[i]);
printf("%d\n",y);
}
}
}