## page was renamed from 程序设计练习20——zju2105——Number Sequence = Number Sequence = http://acm.zju.edu.cn/show_problem.php?pid=2105 Time limit: 1 Seconds Memory limit: 32768K 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 }}} ------ {{{#!cplusplus /*written by proby*/ #include #include #include using namespace std; //336 is the LCM of all cases vector temList; int Calc(int a, int b, int n){ if(temList[n] >= 0){ return temList[n]; } if(n==1 || n==2){ temList[n]=1; return temList[n]; } temList[n] = (a*Calc(a, b, n-1) + b*Calc(a, b, n-2))%7 ; return temList[n]; } int MyMod(double n){ while(n > 340){ n-=336; } return int(n); } void MyClear(int& n){ n=-1; } void MyPrint(int n){ cout<>a>>b>>n; while(a!=0){ res=MyMod(n); if(temList.capacity() < res+1){ //temList.reserve(res+1); temList.resize(res+1); } for_each(temList.begin(), temList.begin()+res+1, MyClear); //"+1" is very necessary cout<>a>>b>>n; } return 1; } }}} ------