HDOJ 1005

 

Input The input consists of multiple test cases. Each test case contains 3 integers A, B and n on a single line (1 <= A, B <= 1000, 1 <= n <= 100,000,000). Three zeros signal the end of input and this test case is not to be processed.  

 

Output For each test case, print the value of f(n) on a single line.  

 

Sample Input

1 1 3

1 2 10

0 0 0  

 

Sample Output

2

5

 

 

刚开始的时候,真的一点的思路也没有,后来想到能不能先枚举出所有的元素(一亿),感觉有点玄乎,但是还是做了,真心的,不是没有白做。经过自己将其中的1000,2000,3000项全部列举出来,你会发现,丫的,竟然有规律:当 A= 3,B= 3 和A=1,B=5的时候这时候周期分别为42 , 21。当A,取10以内的其他的数的时候最大的周期为48,这其中也有16,32.的时候。得嘞,索性就让他的周期为42*48;枚举出这其中的所有情况,齐活!

 

#include<iostream>
using namespace std;
int a[100000005];
int main()
{
    int A,B,n;
    while(cin>>A>>B>>n &&(A!=0 && B!=0 && n!=0))
    {
        A = A%7;
        B = B%7;
        a[0] = 1;
        a[1] = 1;
        a[2] = 1;
        for(int i = 3;i<42*48;i++)
        {
            a[i] = (A*a[i-1] + B*a[i-2])%7;
        }
        n = n%(42*48);
        cout<<a[n]<<endl;

    }

    return 0;
}

 

 之后,看见有人在网上说,周期是48,这显然是不对的……

当然42 = 6*7

  48 = 6*8

最小的周期也可是 6*7*8 = 336;

仅个人思路,往大牛点评……

 

 

 

posted @ 2013-08-05 20:32  平林新袖  阅读(256)  评论(0编辑  收藏  举报