zoukankan      html  css  js  c++  java
  • 杭电1005

    #include <iostream> 
    using namespace std; 
    int main(){
        int a,b,n,m;
        int f[50];
        while(cin>>a>>b>>m){
            if(a==0&&b==0&&m==0)  break;
            f[1]=1;
            f[2]=1;
            for(n=3;n!=50;n++){
                f[n]=(a*f[n-1]+b*f[n-2])%7;
                if(f[n]==1&&f[n-1]==1)
                    break;
            }
            m=m%(n-2);
            if(m==0) cout<<f[n-2]<<endl;   //因为f[0]=0
            else
                cout<<f[m]<<endl;
        }
        return 0;
    }

    循环节

    一开始的做法是:

    #include <iostream>
    using namespace std;
    long long  F[100000001];
    int a,b,n,sum;
    int ff(int m){
        if(m==1||m==2) 
            return 1;
        if(F[m]!=0)
            return F[m];
        for(int i=3;i<=m;i++){
                 sum=(a*ff(i-1)+b*ff(i-2))%7;
                 F[i]=sum;
        }
        return F[m] ;
    }
    int main(){
        while(cin>>a>>b>>n){
            memset(F,0,sizeof(F));
            F[1]=F[2]=1;
            if(a==0&&b==0&&n==0)
                break;
            int s=ff(n);
            cout<<s<<endl;
        }
        return 0;
    
    }

    但是这样报错,看网上有一种解法:用循环节

    %7只有7种结果,所以

     f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.

    f(n)有49种结果,在50之内必有循节。

  • 相关阅读:
    组合继承
    包装明星——封装
    多种添加公用方法的方式
    专有扩展
    插入标记
    mac 命令操作
    php(apache)切换版本
    SqlServer索引+约束篇章
    sqlserver 常用语法
    C# 通用数据访问类
  • 原文地址:https://www.cnblogs.com/wintersong/p/4392910.html
Copyright © 2011-2022 走看看