首页 > 代码库 > AC日记——计算循环节长度 51nod 1035

AC日记——计算循环节长度 51nod 1035

最长的循环节

 

思路:

  我们尝试一种最简单的方法,模拟;

  如何模拟呢?

  每个数,对它模k取余,如果它的余数没有出现过,就补0继续模;

  所以,当一个余数出现两次时,当前的长度即为循环节长度;

 

来,上代码:

#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;int n,ans=0,k=1,d,p=0,flag;bool if_[10005];int main(){    scanf("%d",&d);    for(n=2;n<=d;n++)    {        ans=0,k=1;        memset(if_,false,sizeof(if_));        while(1)        {            if(!k) break;            while(k<n) k*=10;            if(if_[k]) break;            if_[k]=true,k%=n,ans++;        }        if(ans>=p) p=ans,flag=n;    }    cout<<flag;    return 0;}

 

AC日记——计算循环节长度 51nod 1035