Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 斐波那契数平方和的最后一位 #包括 使用名称空间std; int上一个fibonacci最后一个数字(无符号长m){ int-previous=0,current=1; 对于(无符号长i=2;i#包括 使用名称空间std; int fib(long-long-num){ int pre=0,cur=1; num=num%60; 如果(num==0){ 返回0;} else if(num==1){ 返回1; } 否则{ 对于Python中的(int i=2;i_C++_Sum_Fibonacci - Fatal编程技术网

C++ 斐波那契数平方和的最后一位 #包括 使用名称空间std; int上一个fibonacci最后一个数字(无符号长m){ int-previous=0,current=1; 对于(无符号长i=2;i#包括 使用名称空间std; int fib(long-long-num){ int pre=0,cur=1; num=num%60; 如果(num==0){ 返回0;} else if(num==1){ 返回1; } 否则{ 对于Python中的(int i=2;i

C++ 斐波那契数平方和的最后一位 #包括 使用名称空间std; int上一个fibonacci最后一个数字(无符号长m){ int-previous=0,current=1; 对于(无符号长i=2;i#包括 使用名称空间std; int fib(long-long-num){ int pre=0,cur=1; num=num%60; 如果(num==0){ 返回0;} else if(num==1){ 返回1; } 否则{ 对于Python中的(int i=2;i,c++,sum,fibonacci,C++,Sum,Fibonacci,代码 #include <bits/stdc++.h> using namespace std; int fib(long long num ){ int pre=0,cur=1; num = num %60; if(num==0){ return 0;} else if (num == 1){ return 1; } else{ for (int i =2; i<=num; i

代码

    #include <bits/stdc++.h>

using namespace std;

int fib(long long num ){
    int pre=0,cur=1;
    num = num %60;
    if(num==0){
        return 0;}
    else if (num == 1){
        return 1;
    }
    else{
    for (int i =2; i<=num; i++){
        int temp = (pre+cur)%60;
        pre = cur;
        cur = temp;
        // cout<<pre<<"\n"<<cur<<"\n";
    }
    }
    
    return(cur); 
}

int main() {
    long long n = 0;
    cin >> n;
    int a = fib(n);
    int b = fib(n+1);
    
    cout<<(a*b)%10;
    
    
}
输出:

def pisano_num_mod10(n):
   previous, current = 0, 1
   n=n%60 #num mod 10 gives 60 repeatations in Pisano Series.. Check Wikipedia by searching for Pisano Series to get more Info
   if (n == 0): 
       return 0
   elif (n == 1): 
       return 1
   else:
       for _ in range(2,n+1):
           previous, current= current, (previous + current)%60
       return current
if __name__ == '__main__':
    n = int(input())
    print(pisano_num_mod10(n)*pisano_num_mod10(n+1)%10)

我也想分享我的解决方案,这与上面的两个解决方案非常相似。另一方面,我将尽可能多地提供解释,我会以不同的方式执行一个步骤,根据这一差异,我的代码通过了所有测试

第一个要考虑的方程是:

因此,我们只需要第n个和(n+1)个Fibonacci值,而不是在每一步计算一个Fibonacci平方(这需要很长的时间才能预测)

但是,计算高于Pisano周期的值是不现实的(这只是剩余值自身重复的周期)因为我们只寻找最后一个数字,所以我们可以把这个问题看作是Fibonacci值的平方和的模10,因为模10的皮萨诺周期是60,所以我们可以在这里使用这个值。 这就是为什么,对于任何给定的输入数n,如果我们取n的模60并计算平方和,我们将有效地减少计算时间

最后,通过取计算值的模10,我们可以返回最后一位数字

if n=7 
pisano_num_mod10(n) returns 13
pisano_num_mod10(n+1) returns 21
It Prints 13*21%10=3
def fibonacci数(n)的平方和的最后一位数字:

如果n或通过大数组
int fib1[m]
为什么需要数组、大数或递归?只需一直使用最后一个数字。这些练习的要点是让你意识到不需要保留整个数字。在计算的每个阶段,你只需要最后一个数字。记住,(a+b)mod 10=(a mod 10)+(b mod 10)和a*b(mod 10)=(a mod 10)*(b mod 10)。所以在每次加法和乘法之后,都要做
v%=10;
。尝试使用
std::vector
int fib[m]
是一个非标准扩展,如果内存可用,将在内存非常有限的堆栈中分配。有两个观察结果可以帮助您。首先,要计算f_i,您只需要f_{i-1}和f_{i-2}。其次(a+b)mod x=((a mod x)+(b mod x))mod x.如果你同时使用这些函数,你只会受到你自己耐心的限制。你也不需要任何数组。你所需要的只是序列中的最后两个值。因此,如果你正确地编码了数组,所有关于如何分配数组的注释都不应该适用。它应该需要恒定的内存。我已经实现了你的sol但有趣的是,它为第239个斐波那契数计算了一个错误的值。
if n=7 
pisano_num_mod10(n) returns 13
pisano_num_mod10(n+1) returns 21
It Prints 13*21%10=3
def last_digit_of_the_sum_of_squares_of_fibonacci_numbers(n):
   

    if n <= 1: #Check if the input value is too small
        return n

    n = n%60 #If not, take the mod60 of the input


    pre = 0 #First value of the Fibonacci series
    curr = 1 #Second value of the Fibonacci series
    for i in range(2, n+2): #Iterate until n+2, since we are looking for F_N + F_{N+1}
        pre, curr = curr, (pre+curr) #Calculate the current Fibonacci value

    return (pre*curr)%10 #return the mod10