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

HDU 1005 Number Sequence

2010-07-09 14:24 369 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1005

f[1]=1,f[2]=1,f
=(A*f[n-1]+B*f[n-2])%7 (1 <= A, B <= 1000, 1 <= n <= 100,000,000).

n这么大,暴力是肯定TLE了.

1。由题目的式子可知0<=f
<=6,

2。而每个f
又是由(f[n-1],f[n-2])这个组合通过计算得出来的,

由以上两点可以推出,(f[n-1],f[n-2])出现重复的组合的最大周期为7*7=49, 即f
的最大周期

所有, 我们只要算出一个周期中所有的f
的值并记录下周期i即可.

#include<stdio.h>
int main()
{
int a,b,n,i,f[53];
while(scanf("%d%d%d",&a,&b,&n)!=EOF)
{
if(a==0 && b==0 && n==0)
break;
if(n==1 || n==2)
{
puts("1");
continue;
}
f[1]=1,f[2]=1;
a%=7,b%=7;
for(i=3;i<=52;i++)
{
f[i]=(a*f[i-1]+b*f[i-2])%7;
if(f[i-1]==1 && f[i]==1)
break;
}
i-=2;
n%=i;
f[0]=f[i];
printf("%d/n",f
);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: