1035 最长的循环节

1035 最长的循环节

基准时间限制:1 秒 空间限制:131072 KB

正整数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思路:转换为求最小的k使10^k ≡1 (mod n)。就是一开始的余数是1。
 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cmath>
 4 #include <vector>
 5 #include <string>
 6 #include <cstring>
 7 #include<stdlib.h>
 8 #include<stdio.h>
 9 using namespace std;
10 int main(void)
11 {
12     int n;
13     scanf("%d",&n);
14     int minn = 0;
15     int i,j;
16     int maxx = 0;
17     for(i = 3 ; i <=n ; i++)
18     {
19         int t = 1;int flag = 0;
20         for(j = 1; j <= i ; j++)
21         {
22             t*=10;//if(i==7)printf("%d\n",t);
23             if(t%i==0)
24                 break;
25             else if(t%i == 1)
26             {
27                 flag = j;
28                 break;
29             }
30             t%=i;
31         }
32         if(flag > minn)
33         {
34             minn = flag;
35             maxx = i;
36         }
37     }
38     printf("%d\n",maxx);
39     return 0;
40 }
时间: 2024-08-24 02:03:39

1035 最长的循环节的相关文章

51Nod - 1035 最长的循环节

51Nod - 1035 最长的循环节 正整数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 Outp

51nod 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示例

51Node 1035----最长的循环节

51Node  1035----最长的循环节 正整数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 &

最长的循环节

http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1035 因为结果要么是有限小数要么是无限循环小数,那么只要模拟这个过程,然后判断循环就跳出,记录循环次数就好. 1 #include <iostream> 2 #include <string.h> 3 #include <stdio.h> 4 #include <map> 5 using namespace std; 6 int v

KMP的妙用(利用next数组寻找字符串的循环节)

利用KMP的next数组的性质,我们可以找到next数组的循环节. 先说结论: 设字符串长n,则若其  i % ( i – next[n] ) == 0 ,则其有循环节(循环节数目大于1),其循环节数目为 i / ( i – next[n] ) 这里的next数组存储的是匹配到i匹配不成立时,下一个要匹配的位置.即next数组记录的是下一次匹配的位置,而不是下一次匹配的偏移量,若是记录的偏移量,只需修改一下公式即可. 言归正传,我们先证明第一个结论,根据下图来进行说明: 若结论中的关系成立(整除

循环节

循环节 题目描述 第一节是英语课.今天,老师又教了桐桐很多单词.桐桐发现所有单词都有循环节(大写字母一律化成小写字母).如a(循环长度为1,循环节为a),luLul(循环长度为2,循环节为lu),OlyMPic(循环长度为7,循环节为olympic),CcCcccc(循环长度为1,循环节为c),等等. 而且,桐桐发现这能加速她背单词.她上课和ROBIN说了话,老师罚她背单词.虽然就一个,但长度实在太大,单词大小写可以不管,求桐桐需要记多长的最小循环节,并把这个单词的最小循环节输出来(最后一个循环

HDU - 4333 Revolving Digits(拓展kmp+最小循环节)

1.给一个数字字符串s,可以把它的最后一个字符放到最前面变为另一个数字,直到又变为原来的s.求这个过程中比原来的数字小的.相等的.大的数字各有多少. 例如:字符串123,变换过程:123 -> 312 -> 231 -> 123 因为:312>123, 231>123, 123=123 所以答案是:0 1 2 2.令str1=s,str2=s+s,然后str1作为子串,str2作为主串,进行扩展kmp求出str2[i...len2-1]与str1[0...len1-1]的最长

HDU 3746 Cyclic Nacklace 环形项链(KMP,循环节)

题意:给一个字符串,问:要补多少个字符才能让其出现循环?比如abc要补3个变成abcabc.若已经循环,输出0. 思路:KMP的next数组解决.如果已经出现循环,那么答案为0.但是不循环呢?要根据next[len]来断定.我们要用最少字符来补上使其循环,而我们所知的就是要令循环节为k=len-next[len]这么长,即串开头的这么长.补到串长为k的倍数为止,此时,k就是循环节了. 其实答案可以直接算的,我用个循环来找而已.直接算应该是len%k后剩下末尾那小串的长度,补k-len%k这么多个

循环节(BFS)

循环节 时间限制: 1 Sec  内存限制: 64 MB提交: 56  解决: 16[提交][状态][讨论版] 题目描述 第一节是英语课.今天,老师又教了桐桐很多单词.桐桐发现所有单词都有循环节(大写字母一律化成小写字母).如a(循环长度为1,循环节为 a),luLul(循环长度为2,循环节为lu),OlyMPic(循环长度为7,循环节为olympic),CcCcccc(循环长度为1,循环节为 c),等等. 而且,桐桐发现这能加速她背单词.她上课和ROBIN说了话,老师罚她背单词.虽然就一个,但