如题:

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( n∈[10,1000] )的数中倒数循环节长度最长的那个数。

这就意味着我们要求出所有数的倒数的循环节长度(打表),然后逐一比较得出最长的那个数。

怎样打表?那我们就要参考康明昌老师一篇paper所给出的定理来分析一下。

首先看分母为7的循环小数表示式
                             

把1/7的循环节142 857轮换排列:如果从2出发,得285 714,这是2/7的循环节;如果从4出发,得428 571,这是3/7的循环节。以此类推。

不知大家是否已经发现规律:(可以多举几组例子,这里我就只拿7举例了哈)

 1.对于无限循环的小数,循环节长度只与分母有关?且长度小于分母?

2.对于同分母真分数的循环小数来说,循环节里出现的数字都是一样的,只是有不同的排列组合?

要得证 我们首先得来看一个定理:( 为同余符号)

    定理1: 如果 1 ≤ b < a,  a 沒有2或5的質因數, 並且 a 與 b 互質, 

那麼 b/a 的循環節位數恰好等於e: min{ e ∈ N : 10^e ≡ 1 (mod a) }。


证明规律1

由上面给出的定理可知,对于分数b/a,循环节位数 e = min{ e ∈ N : 10^e ≡ 1 (mod a) }.

即循环节长度e只由分母a决定;

又由费马小定理可知,对质数p(除了2、5。10是它们的倍数)有10^(p-1) mod p=1。

显然循环节长度最大为 p-1. 即循环节长度e必然小于分母p

证明规律2

因为: 1/7 = 0.142 857……

由定理1得: 10*(1/7)= 1.428 571……

因此: 3/7 = [10/7] = 0.428 571……

同理,考虑 [30/7] = 2/7,[20/7] = 6/7,[60/7] =4/7,[40/7] = 5/7,[50/7] = 1/7。得证!

3.另外我们要思考的是为什么定理中指出没有 2或5?

因为1/2=0.5、1/5=0.2,这些有限小数对循环节长度是不影响的。

举个例子:73/35 = 73/(5*7) = (2*73)/(10*7) = (1/10)·(146/7) = (1/10)·{20 + (6/7)}

因此, 对于分数73/35,其的循环节与 6/7 的循环节是一样的,都是 867142 ……    是不是很神奇

代码:

#include <iostream>
#include <algorithm>
#include <cstring>
#define INF 0x3f3f3f3f
#define NMAX 1001
using namespace std;
int n, res[NMAX];
void init(){                  //打表  定理:min{e|10^e ≡ 1(mod n),e∈N+}memset(res, -1, sizeof(res));res[1]=0;for (int i = 2; i < NMAX; ++i) {    //分母 只有分母影响循环节int t = i;while (t%5==0)                  //约去因子2和5 为有限小数t/=5;while (t%2==0)t/=2;if (res[t] != -1) {   //已算过res[i] = res[t];continue;}//未算过 即质数   //其实本质只需要计算所有分母为质数的循环节 质数的倍数的数(分母)的循环节位数===这个质数(分母)的循环节位数int x = 10;for (int j = 1; j <= i; ++j) {  //循环节位数 必小于分母x %= i;           //同定理 无影响(同余定理)if (x==1){res[i] = j;break;}x*=10;}}
}
int main(){init();while (cin>>n){int ans = 7;    //n>=10for (int i = 11; i <= n; ++i) {if (res[ans] <= res[i]) {ans = i;     //取max}}cout<<ans<<endl;}return 0;
}

有趣的小数我们就先讨论到这,更多关于循环节的定理知识大家可以去看循环节_维基百科。里面有相关定理证明以及更深入的探讨。

Over~

最长的循环节 之 有趣的无限循环小数相关推荐

  1. 【音频处理】Polyphone 样本编辑 和 样本工具 ( 波形图 | 信息 | 频率分析 | 均衡器 | 播放器 | 终点裁剪 | 自动循环节 | 空白移除 | 音量 平衡 音调 调整 )

    文章目录 一. Polyphone 工具简介 1. 相关参考资料 2. 简要介绍 (1) 软件界面 二. 音源编辑 1. 波形图 ( 1 ) 波形图样式 ( 2 ) 波形图操作 2. 信息 ( 1 ) ...

  2. 嫦娥奔月(KMP,找循环节)及其扩展KMP

    问题描述 <归妹>卦辞为:昔者恒我(姮娥)窃毋死之药于西王母,服之以(奔)月.将往,而枚占于有黄.有黄占之曰:"吉.翩翩归妹,独将西行.逢天晦芒,毋惊毋恐,后且大昌". ...

  3. 【文文殿下】浅谈KMP算法next数组与循环节的关系

    KMP算法 KMP算法是一种字符串匹配算法,他可以在O(n+m)的时间内求出一个模式串在另一个模式串下出现的次数. KMP算法是利用next数组进行自匹配,然后来进行匹配的. Next数组 Next数 ...

  4. 分数换算小数补0法_数学 | 循环小数的循环节以及永远追不上的乌龟

    今天带学生做练习,遇到一个循环小数的问题: 题目:0.0909090-的循环节是(  ). A.09       B.90       C.090      D.9090 不少学生选择B项90,习题答 ...

  5. 欧拉函数求一个数倒数的循环节长度

    首先,费马小定理a与p互素,则a^(p-1)≡1(mod p)  对于一个素数p,取a=10,那么10^(p-1)≡1(mod p)  如果找到一个正整数e使得10^e/p-1/p为整数,那么e就是1 ...

  6. 求循环小数的表示以及循环节长度

    问题:输入整数a和b,输出a/b的循环小数表示以及其循环节长度.例如 a=5 b=43 小数表示为0.(116279069767441860465),循环节长度为21 分析:模拟长除法的计算过程. ① ...

  7. 薛XX后代的IQ CSU1597【循环节】或【快速幂】

    薛先生的后代IQ[循环节]||[快速幂] 薛先生想改变后代的IQ,为此他发明了一种药,这种药有三种属性:A, B, P.他父亲的智商为X,薛先生的智商为Y,用了这种药之后,薛先生的孩子的智商就可以变为 ...

  8. hdu4291 暴力循环节+矩阵快速幂

    题意:       给你一个关系式,x[n] = 3*x[n-1] + x[n-2],求x(x(x[n]))%1000000007. 思路:       做这个题目要明确一点,就是对于取余操作大多数时 ...

  9. 循环节长度 java,第六届蓝桥杯java试题-循环节长度

    两个整数做除法,有时会产生循环小数,其循环部分称为:循环节. 比如,11/13=6=>0.846153846153.....  其循环节为[846153] 共有6位. 代码如下 import j ...

最新文章

  1. Next.js 7发布,构建速度提升40%
  2. hdoop(2)——hdfs一些常用的配置文件
  3. java B2B2C源码电子商务平台 -SpringCloud配置中心高可用搭建
  4. 自定义EventSource(三)IncrementingEventCounter
  5. mysql外键设置sql语句,SQL Server 2008之SQL语句外键
  6. 密码学在区块链中的应用 【八】
  7. goldengate for mysql_GoldenGate for mysql to mysql:单向同步
  8. junit.framework.AssertionFailedError: No tests found in错误解决办法
  9. java组合与继承始示例_Java示例中的组合
  10. tapestry5中文教程 实例demo
  11. 测试苹果电脑性能软件xbench在哪,Mac OS操作系统性能对比测试
  12. 批量删除多个 PPT 空白页
  13. RFID通信系统框图
  14. 七剑下天山,谈谈我认识的精准营销
  15. 孤独后厂村,码农的故乡:30万互联网人跳不出的中国硅谷
  16. finalize 复活_为什么Sekiro的其他内容将在2020年复活
  17. Python 基于pyecharts自定义经纬度热力图可视化
  18. 谷歌(google)世界各国网址大全世界各国google网址
  19. JAVA modify是什么意思_java 问题
  20. 安卓pubg服务器维修中,pubg服务器维护中

热门文章

  1. MACD柱堆形态指标公式
  2. 胶囊网络是什么及其应用
  3. 两张表有不同的字段 可以用union吗
  4. “数字云南”建设成效逐渐显现 区块链财政电子票据带来民生与环保效益
  5. redis 连接数据库_如何连接到Redis数据库
  6. newifi3 web认证_关于wifi portal认证--为浏览器添加wifi认证功能
  7. 全球与中国紫砂壶市场现状及未来发展趋势(2022)
  8. 【转】ubuntu中的Wine详解
  9. ubuntu 20.04 | 安装 Anaconda3
  10. 标签设计软件如何批量制作电动车标签