Number Sequence

题目链接:http://acm.hust.edu.cn/vjudge/problem/visitOriginUrl.action?id=15516

题意:

     f(1)=1,f(2)=1,f(n)=(A * f(n - 1) + B * f(n - 2)) mod 7.

     给你一个A,B和n,你需要求出f(n)的值。(1<=A,B<=1000,1<=n<=100,000,000)

     输入3个0,程序结束。

     案例:

     input

     1 1 3

     1 2 3

     0 0 0

     output

     2

     5

思路分析:

     n的范围过大,根本没办法直接循环,这就需要去找规律。

     进行部分输出可发现,经过49个数是一个循环,这样只需找出每次案例的前49个数,再求出n%49的值,找出所要得的数的位置。输出f[n%49-1]即可。

源代码如下:

 1 #include<iostream>

 2 #define max 100000000

 3 using namespace std;

 4 int main()

 5 {

 6     int A,B,n,f[49];

 7     cin>>A>>B>>n;

 8     f[0]=1;f[1]=1;

 9     while(A!=0&&B!=0&&n!=0)

10     {

11          for(int i=2;i<49;i++)

12              f[i]=(A*f[i-1]+B*f[i-2])%7;

13           cout<<f[n%49-1]<<endl;

14           cin>>A>>B>>n;

15     }

16     return 0;

17 }

 

你可能感兴趣的:(sequence)