斐波那契数列部分和的最后一位数字
Last digit of partial sum of Fibonacci series
我试图找到斐波那契数列从起点到终点的总和的最后一位数字。当我们使用%10
找到最后一个数字时,斐波那契将每 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设置为等于n的值而不是 0(零(int c = n;
此外,请清除是否要包含索引 m 的概念。
例如,如果用户输入:n -> 10
m -> 20
然后
,上面提供的代码将仅将索引 10 中的斐波那契数的最后一位数字值添加到索引 19。因此,请清除我的这个疑问,然后我会进一步补充。
相关文章:
- 斐波那契数列部分和的最后一位数字
- 将第 n 个斐波那契数的大斐波那契数的最后一位编程.C++
- foor 循环的最后一次迭代中的指针更改
- C++ 查找算法:如何找到元素的最后一次出现?
- 如何找到由公式计算的非常大的数字的最后一位数字?
- 在 QSet 中插入元素<QString>并检索 ,删除 QSet 的最后一项
- 为什么 fstream 打印出文件的最后一条记录
- SetThreadContext 仅修改 x64 中 RIP 的最后 32 位
- 仅按位运算反转(翻转)数字的最后 n 位
- 一个月的最后一天?
- 我在spoj-lastdig2中使用我的代码 - 重新访问的最后一位数字
- C 在子字符串内找到字符串的最后一次出现
- 查找非常大的 2^n 数字的最后一位数字
- 如何计算具有相同SHA-160和的另一位模式
- 找到一个提升到一定幂的数字的最后一位
- 如何在c++中交换数字的第一位和最后一位
- 指数的最后一位——答案错误
- 删除浮点数的最后一位时出现的问题
- ' std::sin '的最后一位是错误的
- 定义使用递归查找最后一位偶数的函数