1. 程式人生 > >HDU OJ 1005 Number Sequence

HDU OJ 1005 Number Sequence

Number Sequence

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 178988    Accepted Submission(s): 44485


Problem Description A number sequence is defined as follows:

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

Given A, B, and n, you are to calculate the value of f(n).

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
Author CHEN, Shunbao
Source
Recommend JGShining   |   We have carefully selected several similar problems for you:  
1008
 1021 1019 1009 1012  直接用遞迴或者迴圈肯定超時,爆記憶體。因為  1 <= n <= 100,000,000 所以 關鍵在於  mod 7. 要找其迴圈週期。 如果是一個f()的話 迴圈週期是7 現在是兩個f()所以 迴圈週期是49; 程式碼:
#include <iostream>  
using namespace std;  
int arr[50];  
int main()  
{  
    int n,a,b;  
    arr[1]=arr[2]=1;  
    while(cin>>a>>b>>n)  
    {  
        if(n==0) break;  
        for(int i=3; i<=50; i++)  
        {  
            arr[i]=(a*arr[i-1]+b*arr[i-2])%7;  
        }  
        cout<<arr[n%49]<<endl;  
    }  
    return 0;  
}  

Submit