c++ - 斐波那契数列的部分和的最后一位数字

标签 c++ math fibonacci

我试图找到从起点到终点的斐波那契数列之和的最后一位。当我们使用%10找到最后一位数字时,Fibonnaci将每60次重复其最后一位数字序列-使用 Pisano系列

我对解决方案的尝试:

我们找到前60个数字的最后几个数字,将它们存储在数组中,然后连续循环并求和从n%60到m的数字。然后,我们最终对结果取10。

#include <iostream>
#include <vector>
using std::vector;

int fibonacci_fast(long long n,long long m) {
    // write your code here
    long long a[60];
    a[0]=0;
    a[1]=1;
    long long sum=0;
    for(long long i=2;i<60;i++)
    {
        a[i] = a[i-1]+a[i-2];
        a[i] = a[i] % 10;
    }
    int j=0;
    int p=1;
    int c=0;
    for(int i=n%60;;i++)
    {
        if(i==60)
        {
            i=i%60;
        }
        sum=sum+a[i];
        c=c+1;
        if(c==m)
        {
            break;
        }
    }
    return sum%10;
}

int main() {
    long long from, to;
    std::cin >> from >> to;
    std::cout << fibonacci_fast(from, to) << '\n';
}

当前代码的主要问题是,对于较低的值,它可以正常工作,但是如果我输入较高的值(例如0到239),则仅当条件更改为if(c+1)==m时才起作用,然后生成较小的值解决方案转错了。

虽然c计数器可以正常工作,但最高可达239,但我仍然无法弄清楚代码的问题。

最佳答案

#include <vector>
using std::vector;

int fibonacci_fast(long long n,long long m) {
    // write your code here
    long long a[60];
    a[0]=0;
    a[1]=1;
    long long sum=0;
    sum = a[0] + a[1];
    for(long long i=2;i<60;i++)
    {
        a[i] = a[i-1]+a[i-2];
        a[i] = a[i] % 10;
        sum = (sum + a[i]) % 10;
    }
    int x = (m - n + 1)/60;
    sum = (sum * x) % 10;
    int i = n + 60 * x;
    while(i <= m)
    {
        sum = (sum + a[i%60]) % 10;
        i++;
    }
    return sum;
}

int main() {
    long long from, to;
    std::cin >> from >> to;
    std::cout << fibonacci_fast(from, to) << '\n';
}

关于c++ - 斐波那契数列的部分和的最后一位数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62358519/

相关文章:

Java - 用户输入数学函数的有效评估(可以准备,现有变量)

c - 打印斐波那契数列时,数组打印出奇怪的问号符号

algorithm - 测试一个数字是否是斐波那契

c++ - C++ IPC通讯

c# - 如何检测烛台图中的异常值

javascript - 为什么这个 javascript 和 html 代码没有计算结果?

c - 并行化斐波那契数列生成器

c++ - 从串口读取 C++

c++ - std::map 不接受我的运算符<

c++ - 学完 C++ 应该去哪里?