社区
数据结构与算法
帖子详情
一个数除以另一个数,得到一个商. 这个商可能是个循环小数除不尽. a/b=c问怎么确定这个循环小数c的循环节长度?
worldbankc
2009-11-02 11:25:25
例如? a/b=c, 假设 a=125456, b=23654845742315 , 求c, 已知c肯定是个循环小数? 但不知道c的循环节长度, 怎么根据 a,b的关系知道c的循环节大小呢? 有没有什么简单办法来计算知道循环节大小? 我编程寻找循环节长度,往往循环节都长达一万亿位以上,绝大部分程序都难以寻找.
...全文
1798
23
打赏
收藏
一个数除以另一个数,得到一个商. 这个商可能是个循环小数除不尽. a/b=c问怎么确定这个循环小数c的循环节长度?
例如? a/b=c, 假设 a=125456, b=23654845742315 , 求c, 已知c肯定是个循环小数? 但不知道c的循环节长度, 怎么根据 a,b的关系知道c的循环节大小呢? 有没有什么简单办法来计算知道循环节大小? 我编程寻找循环节长度,往往循环节都长达一万亿位以上,绝大部分程序都难以寻找.
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
23 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
bawgiitx
2009-11-03
打赏
举报
回复
记录余值,两相等余值间即是
perfecttt
2009-11-03
打赏
举报
回复
mark,
算法中的匹配?
二次匹配?
perfecttt
2009-11-03
打赏
举报
回复
mark,
算法中的匹配?
二次匹配?
liumianjia
2009-11-03
打赏
举报
回复
1,a和b互约,得到最小的a和b(把这个b定义为n,下面要用到)
2,a=a%b,(此时得到a<n),记录a
3,a=10*a%b,判断新a是否在记录中能找到,是则结果为(记录总数-重现的记录所在位置),否再次记录a,重复步骤3
这个方法的空间复杂度为步骤1中所得到的n,(因为a<n)
时间复杂度是n*log(2,n),其中步骤3最多循环次数为n,(因为a<n),而内部的记录查找需要log(2,n)
gumbour
2009-11-03
打赏
举报
回复
楼主真是搞笑,5楼的答案不知道你能否看得懂。
不过相信你看懂了也没用,就你这编程水平,03年就能搞出所谓的万亿位循环节,你当你的内存单位是T啊(1万亿 = 1T = 10^12),可笑的是到09年还没发现你的错误所在。
5楼的方法基本原理确实已经是最好的办法了,不过也称不上什么顶尖数学问题,很多数论书里有。但一样要用到基本的寻相同余数,仅在除数不是质数时有提升。
liuhao159753
2009-11-03
打赏
举报
回复
lz,你注定就是一菜鸟,因为你不够谦逊.....
fire_woods
2009-11-03
打赏
举报
回复
小学的时候,我会.
Silitex
2009-11-03
打赏
举报
回复
一定要别人骂你你才爽是吧!虽然上面只有一个人的答案是你想要的,其他人的答案其实你早就知道了!
Silitex
2009-11-03
打赏
举报
回复
[Quote=引用 4 楼 worldbankc 的回复:]
我问的是数学原理. 不是编程,程序倒很简单早在2003程序就写好了. 我问的是在数学上怎么知道 a/b 时,循环节的计算公式. 有没有数学计算公式. 用程序要寻找循环节是很愚蠢的办法. 顶多用来证明一些计算公式是否正确.
我再强调一遍我问的是,有没有数学计算a/b循环节的公式或计算方法. 这个可是极其困难的哦? 我至今没有解决. 这个要有顶尖数学才能的人才能解. 不是一些凡夫俗子所能解决的.
[/Quote]
楼主是一个垃圾!
猫已经找不回了
2009-11-03
打赏
举报
回复
迅雷笔试题,我当时就陷入误区。
其实很简单,你只要模拟除法就可以了。
比如3/7
结果为0,余数为3
然后30/7,结果为4,余数为2,
然后20/7.。。
知道出现有重复的余数,(所以最好用map统计一下余数)即为循环小数。然后只要继续计算,直到下次出现相同的余数,存起来的结果就是循环的数,长度也容易得出。
大体思路就是这样。
worldbankc
2009-11-03
打赏
举报
回复
原来这里有英文的说明:
http://mathworld.wolfram.com/MultiplicativeOrder.html
FBugFramework
2009-11-03
打赏
举报
回复
[Quote=引用 15 楼 smile_tiger 的回复:]
晕,兴冲冲地写完后,发现就是5楼写的东西的一小部分
[/Quote]
.
FBugFramework
2009-11-03
打赏
举报
回复
晕,5F说的更加明确,没看回复。
adfas
2009-11-03
打赏
举报
回复
其实我最想说的是,楼主,你真是是傻逼
FBugFramework
2009-11-03
打赏
举报
回复
我将做大胆的猜想(需证明):
1,两个整数相除,结果一定是循环小数。 (只是有些循环节更大些)
2,循环节大小跟被除数无关。
3,循环节大小跟除数成决定性关系。
4,如果被除数为1,那循环小数为“纯循环数”;如果如果被除数>1,那循环小数
可能
为“非纯循环数”。
5,除数的最大素数越大,往往循环节越大。
关于@3的关系:(我很多概念忘记了,叫不上名,用实际数字说明)
Ex: 153 = 17 * 3 * 3;
我们现说“153”由两个素数组成: 17,3。
那么 循环节大小 受17主要影响,受3次要影响。
被除数:1; 除数:如下:
------------------------------------------------------
2, 除尽
3, 0.
3
3333333333333333333333333333333
5, 除尽
7, 0.
142857
14285714285714285714285714
11, 0.
09
0909090909090909090909090909091
13, 0.
0769230
76923076923076923076923077
17, 0.
0588235294117647
05882352941176471
19, 0.
052631578947368421
052631578947368
23, 0.
0434782608695652173913
04347826087
29, 0.
0344827586206896551724137931
03448
31, 0.
032258064516129032258064516129
032
...
绿色夹克衫
2009-11-03
打赏
举报
回复
恩,5楼说的很好了,没啥可补充的,复杂度最高的地方还是在质数验证及因式分解部分。
不知道待分解的数有多大,效率达到n^1/2肯定是可以的,
质数验证部分现在有准确的固定时间的判定方法。不过分解部分最坏情况下效率还是比较低。
gaoyangboy
2009-11-03
打赏
举报
回复
呵呵。 楼主你可以少谦虚点哦。
fire_woods
2009-11-03
打赏
举报
回复
所以我只写了一句话.
zeroieme
2009-11-03
打赏
举报
回复
11的例子还可以,到后面就不懂了。全都Copy上来了。
zeroieme
2009-11-03
打赏
举报
回复
首先a/b要约分成互质,为m/n,那么m/n与1/n循环节一样。
把n中的2和5的因式全部去掉,这样不影响循环节长度,剩下的因式记为n1。
根据循环小数化为分数的方法,分母必然是99…9(k个9)=10^k-1,并且n1必然整除10^k-1,这样问题就转化为求满足10^k≡1 (mod n1)的最小正整数k。
首先要说欧拉函数φ(n):欧拉函数是一个定义在正整数上的函数,φ(n)的值等于以下这些整数0、1、2、…、n-1与n互素的数的个数。
由定义知,φ(1)=1,φ(2)=1,φ(3)=2,φ(4)=2,……,当p是素数时,φ(p)=p-1。
欧拉函数的计算方法:设n的标准分解式子是p1^k1·p2^k2·…·pm^km,其中p1、p2、…、pm是互不相等的素数,k1、k2、…、km都是正整数,则φ(n)=n(1-1/p1)(1-1/p2)…(1-1/pm)。
例如φ(10)=10×(1-1/2)×(1-1/5)=4。
欧拉定理:设a、m为整数,m>1,(a,m)=1,则a^φ(m)≡1 (mod m)。
整数的次数:a、m为整数,m>1,(a,m)=1,k是使a^k≡1 (mod m)成立的最小正整数,则k叫做a对模m的次数。
次数定理:设a对模m的次数为k,n是满足a^n≡1 (mod m)的正整数,则k|n。
欧拉函数的计算方法、欧拉定理的证明、次数定理的证明可以找初等数论的书,这里就不发上来了。
由欧拉定理可以得到求1/n循环节长度的方法。
举个简单的例子。
例如n=11,则φ(11)=10,根据欧拉定理10^10≡1 (mod 11),所以循环节长度一定是10的正约数。而10的正约数有1、2、5、10,从小到大逐一检验,得到10^2≡1 (mod 11),所以1/11的循环节长度就是2。
假设a、n是大于1的正整数,p是素数,则a对模p的次数没有什么好办法去求,只能用上面的方法。
其它情形有下面两个定理:
假设a、n是大于1的正整数,n的标准分解式是p1^k1·p2^k2·…·pt^kt,其中p1、p2、…、pt是互不相等的素数,k1、k2、…、kt都是正整数,a对模pi^ki的次数为mi,则a对模n的次数为m1、m2、…、mt的最小公倍数。
如果a、n是大于1的正整数,p是素数,k是正整数,a对模p^k的次数是m,则a对模p^(k+1)的次数是m或pm。
这两个定理也可以从初等数论里找到证明,我也不发上来了。
再举一个例子
539=7^2×11
10对模7的次数为6,那么10对模7^2的次数或者是6或者是42,经计算验证得10对模7^2的次数是42。
10对模11的次数为2。
所以10对模539的次数为2和42的最小公倍数,即42,所以1/539的循环节长度为42。
《数论导引》里的差不多就是这些内容了,到现在为止求循环节长度的解法已经全部发上来了。
加载更多回复(3)
(2021-2022年收藏)新北师大版小学五年级上册
数
学第一单元小
数
除法测试题.docx
教育资料
五年级
数
学(上)第二单元测试卷-王磊.doc
五年级
数
学(上)第二单元测试卷-王磊.doc
新北师大版五年级上册
数
学第一单元测试参考.doc
新北师大版五年级上册
数
学第一单元测试参考.doc
新北师大版
数
学五年级上册第一二单元测试卷.doc
新北师大版
数
学五年级上册第一二单元测试卷.doc
八年级上册2.6实
数
同步练习题.doc
八年级上册2.6实
数
同步练习题.doc
数据结构与算法
33,027
社区成员
35,336
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章