推荐一篇有关循环节很有意思的科普文章:https://w3.math.sinica.edu.tw/math_media/d253/25311.pdf
关于循环节,有定理如下:
1.如果1<=b<a,a没有2或5的质因子,并且a与b互质,那么b/a的循环节长度恰好等于min()
2.如果1<=b<a,a没有2或5的质因子,并且a与b互质,那么b/a的循环节长度必整除
代码实现
#include<iostream>
#include<cstdio>
using namespace std;
typedef long long ll;
int main()
{
ll n;
cin>>n;
ll maxn=-100,flag=0;
for(ll i=2;i<=n;i++)
{
ll s1=i,s2=1,s3=0;
while(s1%2==0)
s1/=2;
while(s1%5==0)
s1/=5;
if(s1==1)
s3=0;
else
{
do
{
s2=s2*10%s1;
s3++;
}while(s2!=1);
}
if(maxn<=s3)
{
maxn=s3;
flag=i;
}
}
cout<<flag<<endl;
return 0;
}