数学中国

 找回密码
 注册
搜索
热搜: 活动 交友 discuz
楼主: 白新岭

[原创]请教vfbpgyfk先生一个编程问题

  [复制链接]
 楼主| 发表于 2010-5-12 16:25 | 显示全部楼层

[原创]请教vfbpgyfk先生一个编程问题

这里的4个余数(0,2,6,8)仅是素数余数中的4/Pj的比值,即占它余数类中4份,其余的余数皆符合条件,实际上是对这4个值也要进行求余的,当素数大于7时,即最小的一个素数为11时,模11大于它们4个中的任何一个,所以余数是它们本身,这样就固定死这些余数就可以了,就不必形成动态的每步也对它们求余数了。
那么,这里有了另一个问题,即素数2,3,5,7对它们的余数是多少呢?它们4个对模2求余,余数都为0,即素数2可以把余数1放掉,事先给的被判断值都是奇数,所以素数2不起作用,素数3,这4个数有两种余数,余数0和余数2,没有余数1,所以它把余数1都方行,而我们对所有奇数对3求余数只有三种可能0,1,2,余数6,8不会出现(它会出现余数0和余数2,一样被筛选掉);到了素数5,就有麻烦了,MOD(6,5)=1,余数1要被排除,不会出现余数6,同样MOD(8,5)=3,余数3要被筛除掉,根本不会出现余数8,只有余数4是可以通过的;当素数7参与时,余数8实际上是要排除余数为1的值,余数8根本不会出现。这些都是在上述编程中无法兼顾的,如果每调取一个素数都先对它们4个进行求余,势必加大运算量,还有如果起步较早,运算量也非常大,为了避开这些问题,我们可以提高初始值,跨越小素数要求余数的情况,把被判断值进行分类,以便减少计算数据数量,这样可以解决事先给的余数对每个素数求余数问题。
发表于 2010-5-12 16:35 | 显示全部楼层

[原创]请教vfbpgyfk先生一个编程问题

白新岭:您好!
您说“你把所有不符合条件的都罗列出来了”。实际不是这样,上传表中可以看出:第一栏是“外循环值”。外循环值是从0到100,逐个增加。
第二栏是“被判断值”。计算式为:被判断值=初始值+(外循环值+预先值)*步长。具体值是:初始值=99;外循环值=i(随外循环值增大而变化);预先值=11;步长=2310。以外循环值i=8为例:
被判断值=99+(8+11)*2310
=99+19*2310
=99+43890
=43989
第三栏是“开方根”。开方根=INT(SQRT(43989))=209。
第四栏是“素数”。进入内循环。从素素数表中第二个记录开始读取素数:3,5,7……199(209不是素数,下一个素数是211)
第五栏是“余数”:
按序取素数为条件,对被判断值43989求模:MOD(43989,3)=0,结束,进行下一个,即i=9,步骤如前,MOD(46299,3)=0。
…………
当i=9时,MOD(256509,3)=0。
所以结果都是0。
分析原因就是99和2310。因为99和2310都能被素数3整除,所以对素数3求模后,都为0,不管“外循环值+预先值”怎样变化,结果都为0是正确的,没有人为因素。
您看,这个计算存在着什么问题?问题在什么地方?
————————————————————————
关于通用程序问题。如果无法表达思路,那就确实无法实现。如果能理出思路,应该说是可以实现的。程序复杂程度视需求和思路而定。Windows操作系统不也是很复杂的吗,当然,我还没有达到那个程度,只是说,一般情况下,都可以试试。
 楼主| 发表于 2010-5-12 17:48 | 显示全部楼层

[原创]请教vfbpgyfk先生一个编程问题

下面引用由vfbpgyfk2010/05/12 04:35pm 发表的内容:
白新岭:您好!
您说“你把所有不符合条件的都罗列出来了”。实际不是这样,上传表中可以看出:第一栏是“外循环值”。外循环值是从0到100,逐个增加。
第二栏是“被判断值”。计算式为:被判断值=初始值+(外循 ...
按你现在给出的分析与解释,(我没有看到你编的程序)应该程序是对的,你只需要改变一下初始值和第一读取素数就可以了,在19+30*i中只有3个可以进入初始值,即19,109,199这三个值,你可以从中任选一个,比如选109吧,步长是210,即被判断值=109+i*210(这里另k=0了),再就是从11开始读取素数即可,余数还是0,2,6,8.
请你在试一试,把外循环定为10000.看一看有多少个不被筛选掉,累计并保存。
以便核对编程是否达到预期目的,先谢谢先生的多次交流。
发表于 2010-5-12 18:34 | 显示全部楼层

[原创]请教vfbpgyfk先生一个编程问题

白新岭:您好!
按照您的要求,还是求100内的余数,初始值为19,步长为210,K=0。现传上来,您打开看看,是否有问题,望能将意见反馈回来。
 楼主| 发表于 2010-5-13 09:51 | 显示全部楼层

[原创]请教vfbpgyfk先生一个编程问题

从素数11开始
外循环值→→被筛选值→→开方值→→最多参与素数个数
7→→1489→→38.58756276→→8
90→→18919→→137.5463558→→29
100→→21019→→144.9793089→→30
 楼主| 发表于 2010-5-13 10:15 | 显示全部楼层

[原创]请教vfbpgyfk先生一个编程问题

当外循环值等于7(90,100)时,上边给出了对应的被筛选值,进行了开方,求出了最多几个素数需要参与运算(从11开始,因为初始值及步长已经跨过了素数2,3,5,7这4道关卡,即余数不会是0,2,6,8,因为步长能整除它们,所以余数仅与19有关,可以进行验证,问什么用“最多”这个词,因为在它们之内,从小(11开始)到大(最大值为被筛选值开方前的最后一个素数),在其筛选过程中,只要有一个素数求余的结果在0,2,6,8这4个数之中,内循环程序就会结束,进入下一个外循环上,所以,内循环次数,最多就是被筛选值根号前的素数个数-4(素数2,3,5,7不在参与筛选)。
 楼主| 发表于 2010-5-13 10:16 | 显示全部楼层

[原创]请教vfbpgyfk先生一个编程问题

素数→→1489
11→→4
13→→7
17→→10
19→→7
23→→17
29→→10
31→→1
37→→9
素数→→18919
11→→10
13→→4
17→→15
19→→14
23→→13
29→→11
31→→9
37→→12
41→→18
43→→42
47→→25
53→→51
59→→39
61→→9
67→→25
71→→33
73→→12
79→→38
83→→78
89→→51
97→→4
101→→32
103→→70
107→→87
109→→62
113→→48
127→→123
131→→55
137→→13
素数→→21019
11→→9
13→→11
17→→7
19→→5
23→→20
29→→23
31→→1
37→→3
41→→27
43→→35
47→→10
53→→31
59→→15
61→→35
67→→48
71→→3
73→→68
79→→5
83→→20
89→→15
97→→67
101→→11
103→→7
107→→47
109→→91
113→→1
127→→64
131→→59
137→→58
139→→30
 楼主| 发表于 2010-5-13 10:25 | 显示全部楼层

[原创]请教vfbpgyfk先生一个编程问题

素数平行(同行)对应的数是被筛选值,它们分别对应外循环n=7,90,100.
素数所在列为参与筛选的素数(当然它们必须是被筛选值根号前的素数,且从11开始的);被筛选值所在列是对同行的素数求余的结果,从结果上看,没有一组出现余数为0,或2,或6,或8的。
不知你编程得到的数据都有0,2,6,8,即全部不符合要求。而实际上1489,18919是符合要求的被筛选值。(21019就不用算了,因为你的外循环值取到99,没有取到100,也就没有对它进行处理了)
 楼主| 发表于 2010-5-13 10:29 | 显示全部楼层

[原创]请教vfbpgyfk先生一个编程问题

我自始至终没有看到你的程序,虽然我现在对它还一窍不通,但是从我用的Excel软件中的函数,和寻找四胞胎素数群的过程中,对以编好的程序还是可以阅读领会的。我想,最好把你编的程序贴上来,以便对它进行改进,改良。
 楼主| 发表于 2010-5-13 10:34 | 显示全部楼层

[原创]请教vfbpgyfk先生一个编程问题

如果你的程序编的完整无缺的话,应该只有两个值1489,18919;程序最后显示值为2,即在这100个值中,其中有2个被筛选值符合要求,代表2组四胞胎素数。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|数学中国 ( 京ICP备05040119号 )

GMT+8, 2024-4-20 00:07 , Processed in 0.084961 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表