思路:
我们尝试一种最简单的方法,模拟;
如何模拟呢?
每个数,对它模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; }
时间: 2024-10-09 22:35:25