winxos 发表于 2009-1-3 20:17:52

关于分数的幂级数逼近问题以及循环数问题

今天突然发现论坛有篇关于循环数的问题,让我想到了以前思考过一些问题,如下:
三年多前的时候首先思考的就是循环数问题,( 1/7,1/17的性质让我起的兴趣)
后面研究深入之后发现了很多性质,还引申出了 无意中发现了 分数的幂级数逼近。
先给大家看一些奇特的分数,大家就可以体会的到我下面说的是什么意思了:
1/19=0.0526315789473684210.....
1/98=0.010204081632653061224489795918367....
1/9801=0.00010203040506070809101112....969799...
1/49=0.020408163265306122448979591836734693877551...
300以内的循环数
7       17      19      23   29   47      59      61   97   109   113    131      149      167   179      181      193   223   229   233      257      263      269
注释:现在想起来,当初研究的时候还没有电脑,我用普通计算器算了一个223的循环节,写了我一大张纸!还怕算错,还好没算1949的!:)   后来隔了不多久用文曲星写了个程序才发现涉及到了素数,我就知道问题没那么简单了。

下面是一些记忆,具体的我要翻出当年的笔记本才记得,
以分子为1的真分数做解释,
素数分母P的循环节一定为为p-1的因子,如果=p-1就是所谓的循环数,
如果循环节不是P-1那么就会有相应的几个循环圈,跟你的因子有关系,
如果一个奇数(不一定是素数)则其循环节为其个因子的最大公倍数(好像记得是这样:) )
比如说1/2实际也可以算是循环小数!这是最令人惊讶的,实际上是0的循环!因为我发现任何的分数可以用统一的幂函数和求得!
要求一个分数的循环节,我发现不需要从前往后算也是可以的,
我把这种方法称为
分数的幂函数逼近,最令我当时激动的就是找到了两大类不同的逼近模式,每类都有无数种构造方法,如果有感兴趣的,具体的结论有一部分在这里http://hi.baidu.com/ncutlw/blog/item/c8431bf4d88d406cddc474d7.html?

问题大概前后思考了2个多月的时间,
后来我发现关于循环数的那部分大概在200多年前已经有人研究过了,发现也和我差不多,当时令我很失望,不过关于幂级数逼近的问题我现在还没发现有其他相关的研究,或者是我不知道:)
关于幂级数和的逼近我得到了很多的相关结果,本来想一直研究下去的,不过后来我发现了 逆向构造的n位构造器,让我觉得大为满意,
使得分数的速算成为可能,然后我感觉到这里就差不多了,再深入就耗费太多了,呵呵,这是我大学期间觉得最有意思的一点发现。
winxos 2009-1-3

无心人 发表于 2009-1-3 21:55:42

这里好像有讨论的
具体哪里忘记了

gxqcn 发表于 2009-1-4 10:05:00

我对循环小数研究了一阵子,且推广到任意进制下。

在我的HugeCalc套装软件中有款专门软件,可以快速计算任意分数转小数,
http://www.emath.ac.cn/image/ui_Fraction.gif
在目录 \HugeCalc\testDLL\bin\ 下的 Fraction.exe

参考链接:擂台:分数化小数

sunwukong 发表于 2009-1-4 10:06:49

等比数列
$a$,$a*q$,$a*q^2$,$a*q^3$,……
的和有个公式:

如果 $-1<q<1$,则

$a+a*q+a*q^2+a*q^3+...=a/(1-q)$

所以

sum( a^(n-1)*10^(-kn) ),n 从 1 至 inf = a^(1-1)*10^(-k*1) / ( 1 - a*10^(-k) ) = 1/(10^k-a)    ,成立条件 -1<a/10^k<1

sum( k*(a+1)^(-n)*10^(-n) ),n 从 1 至 inf = k*(a+1)^(-1)*10^(-1) / (1-(a+1)^(-1)*10^(-1)) = k / (10*a+9)    ,成立条件 -1<1/(10a+10)<1


所以

1/19 = (1/20) / (1-(1/20)) = (1/20) + (1/20)^2 + (1/20)^3 +……

1/49 = (1/50) / (1-(1/50))=(1/50) + (1/50)^2 + (1/50)^3 + ……

1/98 = (1/2)*(1/49) = (1/2) * ( (1/50) + (1/50)^2 + (1/50)^3 + ……)

sunwukong 发表于 2009-1-4 10:17:32

关于循环节:

分数 p/q ,(其中 p 、q 互素,而且q与10互素)的循环节的长度是使

10^t= 1 (mod q ) 成立的最小正整数 t。



假设 10^t-1 = q*y 则
p / q = (p*y) / (q*y) = (p*y) / (10^t-1) = (p*y/10^t) / (1-1/10^t) = p*y/10^t + p*y/10^(2t)+ p*y/10^(3t)+ ……

[ 本帖最后由 sunwukong 于 2009-1-4 16:48 编辑 ]

winxos 发表于 2009-1-4 11:09:41

5#,6#分析的很正确,
可是1/19 = (1/20) / (1-(1/20)) = (1/20) + (1/20)^2 + (1/20)^3 +……
如何可以形成反向构造呢?
1/19=0.0526315789473684210.....
你从后往前看,
而且我说的1/19则n+1=2;k=1则我可以用逆向构造1*2来实现
这个能计算的原理是什么呢?我自己也不大清楚,不过可以推广的是一系列的幂级数和可以反向生成。
回复GXQCN:
后来我用过你那个计算器,可惜只能算一个的,呵呵,后来我自己写了这个问题的算法,包括正向和逆向的实现。

gxqcn 发表于 2009-1-4 11:11:58

从小数到分数原理更简单。

winxos 发表于 2009-1-4 11:19:51

关于6#补充一句

10^t= 1 (mod p ) 成立的最小正整数 t。
这是当然的,1/P,循环节的位数小于P的原因就是因为数位滚动就相当于=K/p,如果K>P那么就一定会跟前面的某个数重复,当然在k<p的时候如果就已经重复了,那就不是循环数了,而且重复的独立的循环长度是一样的,都会是p-1的因子。
一个k/P循环出现时一定是余数等于等于k啦,所以循环,如果k=1的话显然循环出现时循环节* P就都是999..了
如果想通过10^t= 1 (mod p ) 来算t我个人觉得没多大的价值,一般的t都是及其的大。

sunwukong 发表于 2009-1-4 12:36:31

原帖由 winxos 于 2009-1-4 11:09 发表 http://bbs.emath.ac.cn/images/common/back.gif
5#,6#分析的很正确,
可是1/19 = (1/20) / (1-(1/20)) = (1/20) + (1/20)^2 + (1/20)^3 +……
如何可以形成反向构造呢?
...

1/49 = (1/50) / (1-(1/50))=(1/50) + (1/50)^2 + (1/50)^3 + …… 就是反向构造

(1/50)^n = (2/100)^n

(1/50)^1 = 2 / 10^2 = 0.02
(1/50)^2 = 4 / 10^4 = 0.0004
(1/50)^3 = 8 / 10^6 = 0.000008
……

medie2005 发表于 2009-1-4 13:18:08

其实很简单的东西.
反向构造:
我们需要按k的降序来计算10^{k} mod p.
因为p=10*n+9,所以,我们有(n+1)*10 mod p=1.然后,所以,我们现在只需要按k的降序来计算:(n+1)^{-k} mod p.
而p为素数,于是就有:(n+1)^{p-1} mod p=1.
因此,我们只需要按k的降序来计算:(n+1)^{-k} *(n+1)^{p-1} mod p.
即:
(n+1)^{p-1-k}mod p.
也就是只需要按i=p-1-k的升序来计算:
(n+1)^{i}mod p.
页: [1] 2
查看完整版本: 关于分数的幂级数逼近问题以及循环数问题