c语言求菲波那契数

菲波那契数大家可能都已经很熟悉了: 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);

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值