注册 登录
编程论坛 VFP论坛

计算P分之一的循环节上的数字

独木星空 发布于 2023-02-25 22:19, 1432 次点击
计算P分之一的循环节上的数字
意思就是计算素数的倒数循环节各位上的数字,1/2=0.5,不循环;1/3=0.3333...循环节长度为1,循环节上的数字是3;1/5=0.2不循环;1/7=0.142857142857....,循环节长度为6,各位上的数字,分别为:1,4,2,8,5,7;
就是这个意思。
18 回复
#2
独木星空2023-02-25 22:22
余数*10    上值    积    1/17的
100    0    0   
17    5    85   
150    8    136   
140    8    136   
40    2    34   
60    3    51   
90    5    85   
50    2    34   
160    9    153   
70    4    68   
20    1    17   
30    1    17   
130    7    119   
110    6    102   
80    4    68   
120    7    119   
10    0    0   
100    5    85   
150    8    136   
140    8    136   
40    2    34   

余数*10    上值    积    1/23的
100    0    0   
23    4    92   
80    3    69   
110    4    92   
180    7    161   
190    8    184   
60    2    46   
140    6    138   
20    0    0
200    8    184
160    6    138
220    9    207
130    5    115
150    6    138
120    5    115
50    2    46
40    1    23
170    7    161
90    3    69
210    9    207
30    1    23
70    3    69
10    0    0
100    4    92
80    3    69
110    4    92
180    7    161
190    8    184
60    2    46
140    6    138
20    0    0
200    8    184
160    6    138
220    9    207
130    5    115
150    6    138
120    5    115
50    2    46
40    1    23
170    7    161
90    3    69
210    9    207
30    1    23
70    3    69
10    0    0
100    4    92
这是用Excel做的,1/17的,1/23的。供参考。
#3
独木星空2023-02-25 22:23
余数*10    上值    积
1000    0    0
257    3    771
2290    8    2056
2340    9    2313
270    1    257
130    0    0
1300    5    1285
150    0    0
1500    5    1285
2150    8    2056
940    3    771
1690    6    1542
1480    5    1285
1950    7    1799
1510    5    1285
2250    8    2056
1940    7    1799
1410    5    1285
1250    4    1028
2220    8    2056
1640    6    1542
980    3    771
2090    8    2056
340    1    257
830    3    771
590    2    514
760    2    514
2460    9    2313
1470    5    1285
1850    7    1799
510    1    257
2530    9    2313
2170    8    2056
1140    4    1028
1120    4    1028
920    3    771
1490    5    1285
2050    7    1799
2510    9    2313
1970    7    1799
1710    6    1542
1680    6    1542
1380    5    1285
950    3    771
1790    6    1542
2480    9    2313
1670    6    1542
1280    4    1028
2520    9    2313
2070    8    2056
140    0    0
1400    5    1285
1150    4    1028
1220    4    1028
1920    7    1799
1210    4    1028
1820    7    1799
210    0    0
2100    8    2056
440    1    257
1830    7    1799
310    1    257
530    2    514
160    0    0
1600    6    1542
580    2    514
660    2    514
1460    5    1285
1750    6    1542
2080    8    2056
240    0    0
2400    9    2313
870    3    771
990    3    771
2190    8    2056
1340    5    1285
550    2    514
360    1    257
1030    4    1028
20    0    0
200    0    0
2000    7    1799
2010    7    1799
2110    8    2056
540    2    514
260    1    257
30    0    0
300    1    257
430    1    257
1730    6    1542
1880    7    1799
810    3    771
390    1    257
1330    5    1285
450    1    257
1930    7    1799
1310    5    1285
250    0    0
2500    9    2313
1870    7    1799
710    2    514
1960    7    1799
1610    6    1542
680    2    514
1660    6    1542
1180    4    1028
1520    5    1285
2350    9    2313
370    1    257
1130    4    1028
1020    3    771
2490    9    2313
1770    6    1542
2280    8    2056
2240    8    2056
1840    7    1799
410    1    257
1530    5    1285
2450    9    2313
1370    5    1285
850    3    771
790    3    771
190    0    0
1900    7    1799
1010    3    771
2390    9    2313
770    2    514
2560    9    2313
2470    9    2313
1570    6    1542
280    1    257
230    0    0
2300    8    2056
2440    9    2313
1270    4    1028
2420    9    2313
1070    4    1028
420    1    257
1630    6    1542
880    3    771
1090    4    1028
620    2    514
1060    4    1028
320    1    257
630    2    514
1160    4    1028
1320    5    1285
350    1    257
930    3    771
1590    6    1542
480    1    257
2230    8    2056
1740    6    1542
1980    7    1799
1810    7    1799
110    0    0
1100    4    1028
720    2    514
2060    8    2056
40    0    0
400    1    257
1430    5    1285
1450    5    1285
1650    6    1542
1080    4    1028
520    2    514
60    0    0
600    2    514
860    3    771
890    3    771
1190    4    1028
1620    6    1542
780    3    771
90    0    0
900    3    771
1290    5    1285
50    0    0
500    1    257
2430    9    2313
1170    4    1028
1420    5    1285
1350    5    1285
650    2    514
1360    5    1285
750    2    514
2360    9    2313
470    1    257
2130    8    2056
740    2    514
2260    8    2056
2040    7    1799
2410    9    2313
970    3    771
1990    7    1799
1910    7    1799
1110    4    1028
820    3    771
490    1    257
2330    9    2313
170    0    0
1700    6    1542
1580    6    1542
380    1    257
1230    4    1028
2020    7    1799
2210    8    2056
1540    5    1285
2550    9    2313
2370    9    2313
570    2    514
560    2    514
460    1    257
2030    7    1799
2310    8    2056
2540    9    2313
2270    8    2056
2140    8    2056
840    3    771
690    2    514
1760    6    1542
2180    8    2056
1240    4    1028
2120    8    2056
640    2    514
1260    4    1028
2320    9    2313
70    0    0
700    2    514
1860    7    1799
610    2    514
960    3    771
1890    7    1799
910    3    771
1390    5    1285
1050    4    1028
220    0    0
2200    8    2056
1440    5    1285
1550    6    1542
80    0    0
800    3    771
290    1    257
330    1    257
730    2    514
2160    8    2056
1040    4    1028
120    0    0
1200    4    1028
1720    6    1542
1780    6    1542
2380    9    2313
670    2    514
1560    6    1542
180    0    0
1800    7    1799
10    0    0   
100    0    0   
1000    3    771    出现循环
2290    8    2056   
2340    9    2313   
270    1    257   
130    0    0   
1300    5    1285   
150    0    0   
1500    5    1285   
2150    8    2056   
940    3    771   
1690    6    1542   
1480    5    1285   
1950    7    1799   
1510    5    1285   
2250    8    2056
1940    7    1799
1410    5    1285
1250    4    1028
2220    8    2056
1640    6    1542
980    3    771
2090    8    2056
340    1    257
830    3    771
590    2    514
760    2    514
2460    9    2313
1470    5    1285
1850    7    1799
510    1    257
2530    9    2313
2170    8    2056
1140    4    1028
1120    4    1028
920    3    771
1490    5    1285
2050    7    1799
2510    9    2313
1970    7    1799
1710    6    1542
1680    6    1542
1380    5    1285
这是用Excel做的,1/257的,供参考。
#4
csyx2023-02-25 23:32
头晕
#5
sdta2023-02-25 23:40
余数*10 这个余数是什么
#6
pvm20002023-02-26 00:24
意义是什么
#7
sam_jiang2023-02-26 00:39
回复 6楼 pvm2000
纯数学
#8
独木星空2023-02-26 08:11
回复 5楼 sdta
就是商*P作为减数,让被除数作为余数,举例说明:如1除23,不够除,上数0(也就是商值),23*0=0;第二步,扩大10,1变成了10,仍就不够除,上数0(也就是商值),23*0=0,余数=10-0=10,扩大10,变成100,此时够除了,上数4,23*4=92,100-92=8,扩大10倍,变成80,上数3,23*3=69,80-69=11,扩大10倍,变成110,.....。
     这不是问题的关键,你可以用自己的方法去实现,我只要程序最终的结果,是整个程序,不是具体的某个P的循环节上的数字。256*256+1的循环节可以达到256*256.  以它作为验证吧。
#9
独木星空2023-02-26 08:14
回复 5楼 sdta
更形象确切的说,就是你如何手工笔算除试,如173/37,小学学的内容,翻译成vfp程序即可。
#10
sdta2023-02-26 09:23
还是不明白
#11
csyx2023-02-26 13:35
以下是引用独木星空在2023-2-26 08:11:38的发言:
就是商*P作为减数,让被除数作为余数,举例说明:如1除23,不够除,上数0(也就是商值),23*0=0;第二步,扩大10,1变成了10,仍就不够除,上数0(也就是商值),23*0=0,余数=10-0=10,扩大10,变成100,此时够除了,上数4,23*4=92,100-92=8,扩大10倍,变成80,上数3,23*3=69,80-69=11,扩大10倍,变成110,.....。
     这不是问题的关键,你可以用自己的方法去实现,我只要程序最终的结果,是整个程序,不是具体的某个P的循环节上的数字。256*256+1的循环节可以达到256*256.  以它作为验证吧。

既然算法都写出来了,转成vfp语法应该就简单了
#12
csyx2023-02-26 14:12
程序代码:
Local ii
Local array aprs[1]

Create Cursor test (prime I, 节长度 I, 循环节 M)
For m.ii = 1 to ALines(m.aprs, '2,3,5,7,11,73,107,997,8317,256*256+1', 1+4, ',')
    Insert into test (prime) Values (Evaluate(m.aprs[m.ii]))
EndFor

Set Escape on        && 预防代码不严谨导致出现死循环, 可按 Esc 中断

Scan all
    Wait window nowait prime        && 监视算到哪个质数了
    Replace next 1 循环节 with 计算循环节(prime)
EndScan
Wait clear
Replace all 节长度 with Len(循环节)
Locate
Browse nowait
Return

Function 计算循环节(pr)
    Local cSg    && 循环节
    Local nRm    && 余数
    Local nQt    &&
    Local nDv    && 被除数
    Local lp    && 用来预防死循环(非必须)
   
    lp    = 0                           
    cSg = ''
    nDv = 10
    Do while lp < 1000000            && 限制下循环节长度
        Do while nDv < pr
            nDv = nDv * 10
            cSg = cSg + '0'
            lp = lp + 1
        EndDo
        nRm = Mod(nDv, pr)
        If nRm == 0
            Exit         && 被整除
        Else
            nQt = Int(nDv / pr)
            nDv = (nDv - nQt * pr) * 10
            cSg = cSg + Str(nQt,1)
            If nRm == 1
                Exit     && 循环了
            EndIf
        EndIf
        lp = lp + 1
    EndDo
    Return cSg
EndFunc
#13
独木星空2023-02-26 14:38
回复 12楼 csyx
做的很好!给你点赞。只要再次出现1就进入循环了。此前用取整函数。有:积=P*商,和,余数=上层余数-积(本次余数扩大10倍)。就这些因素。
#14
独木星空2023-02-28 20:42
回复 12楼 csyx
一个人的领悟能力是决定你的高度。
在数学中国论坛网站,yangchuanju先生,是我最敬佩的,无论什么新的课题,他都能第一时间,进入你所在的领域,如果,没有超强的领悟能力,那是不可能做到的。
     我是奥游数论世界的人,对于有关素数问题是我的最爱,痴迷到忘我的境界。
#15
独木星空2023-03-03 19:12
我的体会是:能在Excel上计算出来的数据,很容易转化成VFP编程语言。
#16
独木星空2023-08-02 21:59
能打开你话匣子的是你感兴趣的东西。
#17
schtg2023-08-03 06:19
#18
独木星空2023-08-25 09:18
在Excel能做的事情,在这里,和vfp上都容易实现。
#19
独木星空2024-11-01 22:07
时间久了,就忘记当时的灵感是如何产生的了。
1