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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章