[51Nod 1035 最长的循环节] 循环小数的性质

知识点:数论 循环小数の性质 欧拉公式

1. 题目链接##

[51Nod 1035 最长的循环节]

2. 题意描述

正整数k的倒数1/k,写为10进制的小数如果为无限循环小数,则存在一个循环节,求<=n的数中,倒数循环节长度最长的那个数,假如存在多个最优的答案,输出所有答案中最大的那个数。
1/6= 0.1(6) 循环节长度为1
1/7= 0.(142857) 循环节长度为6
1/9= 0.(1) 循环节长度为1
(10≤n≤1000)(10\le n\le 1000)

3. 解题思路

首先,需要介绍一下循环小数的几个性质。证明论文《康明昌-循环小数》

  1. 循环小数的每个循环节长度为偶数,(记为2k2k),那么每个循环节中第i(1≤i≤k)i(1\le i\le k)个数字 + 第(i+k)(i+k)个数字之和为99;
  2. 如果pp是质数,并且dd是1p\frac{1}{p}的循环节的位数,则dd可以整除p−1p-1;
  3. 如果1≤b<a1\le b\lt a, aa没有22或者55的质因数,并且aa与bb互质,那么ba\frac{b}{a}的循环节位数等于:min{e∈N:10e≡1(moda)}min\{ e\in N: 10^e \equiv 1(\mod a )\};
  4. 如果1≤b<a1\le b\lt a, aa没有22或者55的质因数,并且aa与bb互质,那么ba\frac{b}{a}的循环节位数必整除ψ(a)(即a的欧拉函数)\psi(a)(即a的欧拉函数);
  5. 如果n,m≥3n, m\ge 3, 22和55都不整除mnmn,并且nn与mm是互质的正整数,则1mn\frac{1}{mn}的循环位数是1n\frac{1}{n}与1m\frac{1}{m}循环小数位数的最小公倍数;
  6. …\dots…\dots,其他定理可以参考论文。

在这个题,我们需要用到的结论就是第3条。
需要特殊处理的是,分母含22或55的因数。如1235\frac{1}{235}。可以先将22或55的因数提出来:

1235=15∗47=247∗110

\frac{1}{235}=\frac{1}{5*47}=\frac{2}{47} * \frac{1}{10}
1235\frac{1}{235}的循环位数是跟 247\frac{2}{47}是一样多的。而 247\frac{2}{47}循环位数也正是 147\frac{1}{47}的循环位数。
数据比较小,所以暴力枚举 e<script type="math/tex" id="MathJax-Element-218">e</script>即可。

4. 实现代码

#include <bits/stdc++.h>
using namespace std;typedef pair<int, int> PII;const int MAXN = 1000 + 5;int n;int q_pow(int a, int b, int mod) {int ret = 1;while(b > 0) {if(b & 1) ret = ret * a % mod;a = a * a % mod;b >>= 1;}return ret;
}int calc(int x) {while((x & 1) == 0) x >>= 1;while(x % 5 == 0) x /= 5;if(x == 1) return 1;int e = 1;while(q_pow(10, e, x) != 1) e ++;return e;
}PII ans[MAXN];
void init() {ans[1] = PII(1, 0);for(int i = 2; i < MAXN; i++) {int z = calc(i);if(ans[i - 1].second <= z) ans[i] = PII(i, z);else ans[i] = ans[i - 1];}
}int main() {
#ifdef ___LOCAL_WONZY___freopen("input.txt", "r", stdin);
#endif // ___LOCAL_WONZY___init();while(~scanf("%d", &n)) {printf("%d\n", ans[n].first);}return 0;
}

[51Nod 1035 最长的循环节] 循环小数的性质相关推荐

  1. 51Nod - 1035 最长的循环节

    51Nod - 1035 最长的循环节 正整数k的倒数1/k,写为10进制的小数如果为无限循环小数,则存在一个循环节,求<=n的数中,倒数循环节长度最长的那个数,假如存在多个最优的答案,输出所有 ...

  2. 最长的循环节 之 有趣的无限循环小数

    如题: 1035 最长的循环节  基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 正整数k的倒数1/k,写为10进制的小数如果为无限循环小数,则存在一个循环节,求& ...

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

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

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

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

  5. c语言判断循环小数,a/b=c问怎么确定这个循环小数c的循环节长度?

    你们这个论坛弄的不是很好, 发贴点出一个小窗口后(在小窗口里发不了贴),  必须要点大窗口才能发的上来.   而且里面的很多设置繁琐.  有些都是无效的失灵的.  实际上我就根本没点收费,我都不知道收 ...

  6. 编程题:寻找无限循环小数的循环节及长度

    题目描述 给定正整数a, b,如果a 除以 b 结果为无限循环小数,求解该无限循环小数的循环节及其长度. 题解思路 模拟长除法的计算过程. 利用长除法求解 3/7,具体如下图: 求解算法描述 被除数除 ...

  7. c语言 查找循环节起点,用C语言怎么求循环小数的循环节?

    满意答案 zybehqej 推荐于 2016.09.09 采纳率:43%    等级:8 已帮助:512人 1.判断循环的关键是在确定每位小数的时候,判断余数是否出现与之前的相同. 2.例程:int  ...

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

    首先,费马小定理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 ...

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

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

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

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

最新文章

  1. asp.net webform 与asp.net mvc 混合开发项目总结
  2. Office365 Manager Plus之报表
  3. Java的Locale类
  4. 一个哈工大计算机系的在读博士,勤思考爱分享的超级大佬!
  5. 法国spin高等计算机学校,法国顶尖“大矿”,一起去矿校挖矿吧!
  6. bootstrap-table 加表格线 样式换成table-bordered
  7. 投毒、伪装、攻击,DNS 欺骗和钓鱼网站如何一步步诱人掉入陷阱?
  8. 项目管理工具project软件学习(四) - 日历保存为模板、日历重命名、删除
  9. linux(中文输入法,显示语言)
  10. 网络流量分类方法调研
  11. 零代码也能玩转指标系列:通过界面也能实现指标的四则运算
  12. 设计模式:行为型模式
  13. 企业微信无缘无故被封
  14. SAP BASIS ADM100 中文版 Unit 5(1)
  15. 百度飞桨第一课--让人拍案叫绝的创意都是如何诞生的?
  16. 苏州银行信息技术面试
  17. Mysql Table doesn't exist问题解决
  18. win10专业版安装
  19. sql左连接出现重复数据
  20. Windows Support Tools

热门文章

  1. 浅谈程序员的数学修养
  2. 保存新浪微博中的作品视频的技巧
  3. 笔记本连接显示器后没有声音_外接显示器后没声音怎么回事
  4. python不用api爬twitter
  5. RFID通信系统框图
  6. 【机器学习】实验一 实验报告
  7. 人工神经网络编程内容,神经网络用什么编程
  8. 双硬盘安装双系统 win7 + Ubuntu12
  9. Word写作 | 如何在Word中把图片铺满整个页面
  10. 微信公众号开发笔记(七)上传素材获取Media_id