Fancy Mouse
- -|||
要注意该函数mod7的余数一定是循环的。设法求出循环节长度,并且保留一个完整的循环节,程序接下来就没问题了~
#include<iostream>
using namespace std;

const int N = 7;
int loop;
int f[55];
void sFibonacci(int a,int b);
int sFibonacci(long n);
int main()
{
    
int a,b;
    
long n;
    
while(cin>>a>>b>>n)
    
{
        
if(0==&& 0==&& 0==n) break;
        
if(n<=2)
        
{
            cout
<<1<<endl;
            
continue;
        }

        a
%=N;
        b
%=N;
        sFibonacci(a,b);
        cout
<<sFibonacci(n)<<endl;
    }

    
return 0;
}

void sFibonacci(int a,int b)
{
    f[
1]=f[2]=1;
    
for(loop=3;1;loop++)
    
{
        f[loop] 
= (a*f[loop-1+ b*f[loop-2]) % N;
        
if(loop>4 && (f[loop]==f[4&& f[loop-1]==f[3]))
            
break;
    }

    loop
-=4;
}

int sFibonacci(long n)
{
    
if(n<=2return 1;
    
else return f[(n-3)%loop+3];
}
posted on 2005-10-22 01:46  Fancy Mouse  阅读(297)  评论(1编辑  收藏  举报