您的位置:首页 > 其它

51nod 1035 最长的循环节

2017-09-29 19:01 309 查看

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

题解:

已知整数n,求最小的k使10^k ≡1 (mod n),k<=n。

代码:

#include <iostream>
#include <cstring>

using namespace std;

const int MAXN = 1005;

int res[MAXN];  //  循环节长度

int main()
{
memset(res, 0, sizeof(res));

int i, temp, j, n;

for (temp = 1; temp <= 1000; temp++)
{
i = temp;
while (i % 2 == 0)
{
i /= 2;
}
while (i % 5 == 0)
{
i /= 5;
}
n = 1;
for (j = 1; j <= i; j++)
{
n *= 10;
n %= i;
if (n == 1)
{
res[temp] = j;
break;
}
}
}

int max_re;

while (cin >> n)
{
max_re = 1;
for (i = 1; i <= n; i++)
{
if (res[i] > res[max_re])
{
max_re = i;
}
}
cout << max_re << endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: