输入n(10 <= n <= 1000)
输出<=n的数中倒数循环节长度最长的那个数
10
7
思路:一个整数n的倒数的循环节,就是求x: 10^x≡1(mod n)
需要特殊处理的是,分母含2或5的因数。如1235。可以先将2或5的因数提出来:
1/235=1/(5*47)=(2/47)*(1/10)
1/235和2/47的循环位数一样多。而2/47和1/47的循环位数一样多。
Code:
#include
using namespace std;
const int MAX_N=1005;
int n,ans;
int a[MAX_N];
//一个整数n的倒数的循环节,就是求x: 10^x≡1(mod n)
int main()
{
ios::sync_with_stdio(false);
for(int i=1;i<=MAX_N;++i)
{
int k=i;
while(k%2==0){
k/=2;
}
while(k%5==0){
k/=5;
}
for(int j=1,p=10%k;j<=i;p=(p*10)%k,++j)
if(p==1){
a[i]=j; break;
}
}
while(cin>>n){
int ans=0,Max=0;
for(int i=1;i<=n;++i)
if(a[i]>Max){
Max=a[i]; ans=i;
}
cout<