HDU1005:循环节

HDU1005

题解:

一道循环规律题。既然是模7,那么有49种组合。在[3,49]内枚举,如果重现了f[1]和f[2],那么就是一个循环。

代码:

#include <bits/stdc++.h>
using namespace std;
int const MOD = 7;
int const N = 60;
int n,a,b;
int f[N] = {0,1,1};
int main(){
	while(~scanf("%d%d%d",&a,&b,&n)){
		if(!a && !b && !n)	break;
		int i;
		for(i=3;i<50;i++){
			f[i] = (a * f[i-1] + b * f[i-2]) % MOD;
			if(f[i] == 1 && f[i-1] == 1)	break;    //循环的长度为i-2
		}
		n = n % (i-2);
		if(n == 0)	printf("%d\n",f[i-2]);   //最后一个
		else	printf("%d\n",f[n]);
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_42264485/article/details/88578555