题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1035
1035 最长的循环节
基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 关注正整数k的倒数1/k,写为10进制的小数如果为无限循环小数,则存在一个循环节,求<=n的数中,倒数循环节长度最长的那个数。
1/6= 0.1(6) 循环节长度为1
1/7= 0.(142857) 循环节长度为6
1/9= 0.(1) 循环节长度为1
Input
输入n(10 <= n <= 1000)
OutPut
输出<=n的数中倒数循环节长度最长的那个数
Input示例
10
Output示例
7
贴代码:
#include <iostream>
#include <cstring>
using namespace std;
int a[1001];
int ef(int n)
{
int temp=n;
for(int i=2;i*i<=n;i++)
{ if(n%i==0)
{temp=temp/i*(i-1);
while(n%i==0)
{
n/=i;
}
}
}
if(n>1) temp=temp/n*(n-1);
return temp;
}
int main()
{ int m,n,e,temp;
for(int j=1;j<=1000;j++)
{m=j;temp=1;
while(m%2==0)
{
m/=2;
}
while(m%5==0)
{
m/=5;
}
e=ef(m);
for(int i=1;i<=e;i++)
{
temp*=10;
temp%=m;
if(temp==1) {a[j]=i;break;}
}
}
while(cin>>n)
{ int ma=1;
for(int i=1;i<=n;i++)
if(a[i]>a[ma]) ma=i;
cout<<ma<<endl;
}
return 0;
}