数字顺序
时间限制: 1 Sec 内存限制: 128 MB
提交: 95 解决: 10
[提交] [状态] [讨论版] [命题人:admin]
题目描述
一个数字序列定义如下:f(1)= 1,f(2)= 1,f(n)=(A * f(n-1)+ B * f(n-2))mod 7.给定A,B和n,您将要计算f(n)的值。
输入
输入包含多个测试用例。每个测试用例在一行上包含3个整数A,B和n(1 <= A,B <= 1000、1 <= n <= 100,000,000)。三个零表示输入结束,该测试用例将不被处理。
输出
对于每个测试用例,输出一行,为f(n)的值。
样例输入
1 1 3
1 2 10
0 0 0
样例输出
2
5
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a,b,ans[100],i;
long long n,T;
while(cin>>a>>b>>n)
{
a%=7;b%=7;
if(a==0&&b==0&&n==0)
break;
memset(ans,0,sizeof(ans));
ans[0]=1;ans[1]=1;
//cout<<1<<endl<<1<<endl;
for(int i=2;i<=60;i++)
{
ans[i]=(a*ans[i-1]+b*ans[i-2])%7;
//cout<<ans[i]<<endl;
}
for(i=2;i<60;i++)
{
if(ans[i]==1&&ans[i+1]==1)
{
T=i;
break;
}
}
cout<<ans[(n-1)%T]<<endl;
}
return 0;
}
ans[100]
i<=60
这里100 60哪里来的
这里不需要保存中间项到数组,只要保存f(n-1) f(n-2)两个变量即可
1 <= n <= 100,000,000