蓝桥杯-斐波那契

标题:斐波那契

斐波那契数列大家都非常熟悉。它的定义是:
f(x) = 1                    .... (x=1,2)
f(x) = f(x-1) + f(x-2)      .... (x>2)
对于给定的整数 n 和 m,我们希望求出:
f(1) + f(2) + ... + f(n)  的值。但这个值可能非常大,所以我们把它对 f(m) 取模。
公式参见【图1.png】
但这个数字依然很大,所以需要再对 mod 求模。

【数据格式】
输入为一行用空格分开的整数 n m mod (0 < n, m, mod < 10^18)
输出为1个整数
例如,如果输入:
2 3 5
程序应该输出:
0
再例如,输入:
15 11 29
程序应该输出:
25

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
LL n,m,mod;
int main()
{
    scanf("%lld %lld %lld",&n,&m,&mod);
    LL a=1;
    LL b=1;
    if(m>=n+2)
    {
        for(LL i=3; i<=n+2; i++)
        {
            LL t=a;
            a=b;
            b+=t;
        }
        printf("%lld",b%mod-1);
    }
    else
    {
        LL fibM,fibN_2=0;
        for(LL i=3; i<=n+2; i++)
        {
            LL t=a;
            a=b;
            b+=t;
            if(i==m) fibM=b;
        }
        fibN_2=b;
        printf("%lld",fibN_2%fibM%mod-1);

    }
}

以上代码是40分

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容