求递推序列的第N项

来源:互联网 发布:淘宝上怎么删除评价 编辑:程序博客网 时间:2024/06/08 09:50
有一个序列是这样定义的:f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.
给出A,B和N,求f(n)的值。
Input
输入3个数:A,B,N。数字之间用空格分割。(-10000 <= A, B <= 10000, 1 <= N <= 10^9)
Output
输出f(n)的值。
Sample Input
3 -1 5
Sample Output

6

#include<cstdio>long long f[50];int main(){    long long a,b,n;    while(~scanf("%lld%lld%lld",&a,&b,&n))    {        f[1]=f[2]=1;        long long i;        for(i=3; i<50; i++)        {            f[i]=((a*f[i-1]+b*f[i-2])%7+7)%7;            if(f[i]==1&&f[i-1]==1)//如果f[i]和前面的f[i-1]相等并且等于1了,说明到了一个周期                break;        }        i-=2;//i就是周期长度        f[0]=f[i];//巧妙        printf("%lld\n",f[n%i]);    }    return 0;}


原创粉丝点击