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

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

下面是一个网友发表的回复:

首先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。

《数论导引》里的差不多就是这些内容了,到现在为止求循环节长度的解法已经全部发上来了。

下面是另一个网友发表的回复:

我将做大胆的猜想(需证明):

1,两个整数相除,结果一定是循环小数。 (只是有些循环节更大些)

2,循环节大小跟被除数无关。

3,循环节大小跟除数成决定性关系。

4,如果被除数为1,那循环小数为“纯循环数”;如果如果被除数>1,那循环小数可能为“非纯循环数”。

5,除数的最大素数越大,往往循环节越大。

关于@3的关系:(我很多概念忘记了,叫不上名,用实际数字说明)

Ex: 153 = 17 * 3 * 3;

我们现说“153”由两个素数组成: 17,3。

那么 循环节大小 受17主要影响,受3次要影响。

被除数:1;  除数:如下:

------------------------------------------------------

2,  除尽

3,  0.33333333333333333333333333333333

5,  除尽

7,  0.14285714285714285714285714285714

11, 0.090909090909090909090909090909091

13, 0.076923076923076923076923076923077

17, 0.058823529411764705882352941176471

19, 0.052631578947368421052631578947368

23, 0.043478260869565217391304347826087

29, 0.034482758620689655172413793103448

31, 0.032258064516129032258064516129032

...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值