题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1005
方法:找规律
思路:直接做也没啥问题,如果多次求模的话不会爆int的,但是会超时。也就是说我们不能直接得到n之后就去运算,一直算到n为止,这样时间上消耗太大。转换思路,求模一般是有规律,这个题也不例外,但是由于A、B不同,这种规律也不相同,但是在A、B一定的情况下,只有7*7=49种组合。只要在选定AB的情况下找到对应的周期,我们就不用一直算到n了。另外,值得注意的是,这个周期不一定是从f1就是周期的第一个数,因此周期的开始位置也是需要寻找的。
难点:动态的寻找周期,寻找周期起始位置。
#include <cstdio>
using namespace std;
const int N = 100000005;
int f[N]={0};
int main()
{
int a,b,n;
int i,j;
while(~scanf("%d%d%d",&a,&b,&n))
{
if(a == 0&&b == 0&&n == 0) break;
f[1] = f[2] = 1;
int period = 0;//记录周期
for(i = 3;i <= n;i++)//注意是从3开始递推
{
f[i] = (a*f[i-1]+b*f[i-2])%7;
for(j =