您的位置:首页 > 产品设计 > UI/UE

ZOJ Problem Set - 2105 Number Sequence

2010-01-19 18:34 459 查看
ZOJ Problem Set - 2105
Number Sequence

Time Limit: 1 Second Memory Limit: 32768 KB

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

这道题把我郁闷了好一会儿,才发现要用周期性解。。。。只要检测到两个连续的1,就可以得出已经进入下一个周期

#include <iostream>

using namespace std;

int main()

{

int a,b;

unsigned long n,f[100];

while(cin>>a>>b>>n && (n!=0||a!=0||b!=0))

{

f[1]=f[2]=1;

if(n>=3)

{

int i=3;

for(;i<100;++i)

{

f[i]=(a*f[i-1]+b*f[i-2])%7;

if(f[i]==1&&f[i-1]==1)break; //检测到周期开始重复,i-2处即为一个完整的周期

}

i-=2; n%=i;

if(n==0)n=i;

cout<<f
<<endl;

}

else cout<<f
<<endl;

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: