HDU 1005 Number Sequence 打表找循环节

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1005

数学问题,在集合f中f(1)=1,f(2)=1,给定A、B和n,求f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7。

这个题可以先打表,随意给定A、B、n的值,会发现f的值存在循环节,而每次都mod7,所以f(n-1)和f(n-2)都有0—6七种状态,一共49种状态,只要找到循环节即可,而循环节的是以两个1开始的。

#include<cstdio>
#include<iostream>
using namespace std;
int f[105];
int main()
{
    int a,b,n;
    while(cin>>a>>b>>n)
    {
        if(a==0&&b==0&&n==0) break;
        f[0]=1,f[1]=1,f[2]=1;
        int t;
        int flag=0;
        for(int i=3;i<=50;i++)
        {
            f[i]=(a*f[i-1]+b*f[i-2])%7;
            if(f[i]==1&&f[i-1]==1)
            {
                t=i;
                break;
            }
        }
        n=n%(t-2);
        if(n==0) cout<<f[t-2]<<endl;
        else cout<<f[n]<<endl;
    }
}


发布了27 篇原创文章 · 获赞 5 · 访问量 3万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章