数学中国

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

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

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

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

白新岭 你是否知道:数论学科已建立数千年了,至今还没有得到质数分布有规则模式,则任何有关质数问题也不可能存在有规则的情况,这也是有关质数问题难以研究与破解的最根本原因。你看成千上万的数学家都研究过数论,但至今在数论中连个象样的公式一个也没有啊!!

点评

你所考虑的事情,我不可能不去思考。只不过,侧重点不同,你持反方意见,认为素数问题不能模拟成数学模型;而我却恰恰相反,任何素数问题都可以建立一个“数学模型”,或直接说,可构造一种算法,来实现它。  发表于 2021-2-14 20:18
发表于 2010-5-10 16:45 | 显示全部楼层

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

白新岭:您好!
有几个事需要落实:
1、您的外循环如何定义,也就说,从“什么数值(起始值)”到“什么值(结束值)”。比如:从“1”循环到“5”,则是:1、2、3、4、5,逐个完成规定做的事。
以您的例子来说:99是基本数,3是否为内循环值,不理解(先当定处理),11是循环值,2310是步长,则有下面结果:
99+(3+1)*2310=99+4*2310=99+9240=9339
99+(3+2)*2310=99+5*2310=99+11550=11649
…………
99+(3+5)*2310=99+8*2310=99+18480=18579
如果3为内循环数(内循环的起始值定为3,是吗),那么,内循环的终止值是什么?
如果是内循环,则上例可写作(只写第一步,其余类同):
99+(3+1)*2310=99+4*2310=99+9240=9339
99+(4+1)*2310=99+5*2310=99+11550=11649
99+(5+1)*2310=99+6*2310=99+13860=13959
…………
如果内循环是按素数顺序出现,也是同理,只不过需要把4改为5;5改为7(都是读取的,内循环是按素数表的记录号顺序写成,再读取相应记录号下的素数)。这个需要定下来。
2、关于“m个偶数(余数)0,2a,2b,2c,....。一般的把m限制在15个以内吧”的理解:
这些“余数”因何而来?或者说,是“什么数”除“什么数”的“余数”。凡涉及类似问题,都确定出,否则,怎能得到“余数?。
3、基本数(您例子中的99)是怎样确定的,是变化的?还是固定的?如果是变化的,依据什么条件。
先说这些,再有问题,另发贴。[br][br]-=-=-=-=- 以下内容由 vfbpgyfk 时添加 -=-=-=-=-
纠正:
“(先当定处理)”应为“(先当定值处理)”
“都确定出”应为“都要确定下来”
 楼主| 发表于 2010-5-10 17:17 | 显示全部楼层

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

[这个贴子最后由白新岭在 2010/05/10 05:52pm 第 2 次编辑]
下面引用由vfbpgyfk2010/05/10 04:45pm 发表的内容:
白新岭:您好!
有几个事需要落实:
1、您的外循环如何定义,也就说,从“什么数值(起始值)”到“什么值(结束值)”。比如:从“1”循环到“5”,则是:1、2、3、4、5,逐个完成规定做的事。
以您的例子来说 ...
外循环是从0到n,也就是是说在本程序中一共需要被判断的数的个数,例如有100个数需要被判断,则n=99,赋值从0开始,每被判断一个数,n就增加1,即 n=n+1.被判断值是一个关于n的一次函数,被判断值=初始值+(n+k)*步长,初始值预先给定,k值预先给定,k是一个正整数,步长预先给定(但是它们需要用户每次给出确定值,包括外循环次数,即此次需要判断的数的总个数,每一个n值对应着一个被判断数。
初始值需要用户手工找到,它与步长是一个相关的值。第一参与筛选的素数也与初始值有关,不同的初始值和步长决定从某个小素数开始进行运行程序,当然也可以从第一个素数开始,从素数3开始。(这里2就不必用了,因为都是奇数,所给余数都是偶数,每个被筛选值都不会被素数条件2筛除掉)。
上边是外循环的内容。
到内循环就是针对每一个确定的n值(它不大于所给外循环次数-1),然后调取它开方前的每一个素数,对它求余,例如n=0时,被判断值=99+(0+3)*2310=7029.【这里k=3,即从第3+1个这样的数开始(当然可以从第一个这样的数开始,即从99+(0+0)*2310=99,设一个k值是为了把大量需要判断的数分批处理,例如第一次处理前1000个数据,另k=0,n=999;第二次处理1000个数据,另k=1001,n=999)】,SQRT(7029)=83.84,调取84以前的每个素数,对它求余MOD(7029,3)=0,预先给的余数中有0(0,2,6,8),所以内循环结束,对下一个n值进行判断;假设,所得余数没有在预先给的余数中出现,应继续调入下一个素数,直到调完所有素数(它根号前的素数,从这里可以看出,n值越大,被调用的素数数量就越多)。
至于余数是如何得出的,那需要用户自己提前手工完成。之所以限定最多提前给15个余数,是因为现在的计算机无法找到更大的数符合15个余数的排查,这里提前给的余数是每个参与素数对判断值的余数要比较的。
发表于 2010-5-10 21:41 | 显示全部楼层

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

白新岭:您好!
可能是理解方面原因,做出结果不尽人意。下面把我的理解及试做的结果贴上,您看错在何处。
1、输入值:①K值;②初始值;③步长;④外循环的起始值;⑤外循环的结束值(N)。
2、求出被判断值(初始值+(k+外循环次数n)*步长)。
3、对被判断值进行开方,取整理(没有必要四舍五入)。
4、确定开方根在素数表中的位置,为判断时调用素数服务。
5、从素数3开始,逐个素数对“被判断值”进行判断,以当时素数为条件取模。
6、说明:只有被判断数(初始值+(k+外循环次数n)*步长)为偶数时,余数才能为偶数。
7、当余数为:0、2、6、8时,保存(数据多,保存为好)或显示“被判断值”和“余数”,程序跳出内循环,进行下一个判断。直到满足外循环条件止。
8、如果N大于步长,是否需要步长相对增大,即L倍步长(L=1,2,3……)。
9、随贴附上试求信息表。以您的例子做的。
⑴ 输入的数值:初始值=99;K=11;步长=2310;外循环起始值=0;终结值=100。
⑵ 计算结果见附件。
⑶ 由于初始值=99和步长=2310,两个数都是3的倍数,所以,被判断值才能被3整除,则余数都为0。
⑷ 第6条已经考虑到,只有偶数取模才可能有偶余数,任意奇数被奇数(素数)除,其余必为奇数。事实上,求出的被判断数都是奇数(见附表),除模为0外,不可能有2、6、8的偶余数。
⑸ 经分析,本例中之所以都为奇数,主要原因是:初始值=99(奇数);(k+外循环次数)*步长中的“步长”是偶数,则“(k+外循环次数)*步长”之积都为偶数。奇数加偶数等于“奇数”。这些问题请考虑。
 楼主| 发表于 2010-5-11 08:58 | 显示全部楼层

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

[这个贴子最后由白新岭在 2010/05/11 09:33am 第 2 次编辑]
下面引用由vfbpgyfk2010/05/10 09:41pm 发表的内容:
白新岭:您好!
可能是理解方面原因,做出结果不尽人意。下面把我的理解及试做的结果贴上,您看错在何处。
1、输入值:①K值;②初始值;③步长;④外循环的起始值;⑤外循环的结束值(N)。
2、求出被判断值( ...
先生的理解基本上正确。
我又阅读了有关编程这方面的内容,可以把内循环称为子程序(或过程),在每一个n被确定后,就确定了被判断值=初始值+(k+n)*步长(有多少次外循环,就有多少个这样被判断的值),对确定的被判断值要求对它开方,我们需要这个开方值来划分参与运算的素数界限,只有小于它的素数才参与运算,大于它的素数是不会参与运算的,这里还有一个问题,即便是被判断开方前的素数,也不一定都参与运算,这个不参与运算有两个含义,其中之一是:用户已证明前几个素数不能把被判断值排除掉,筛选掉的素数,例如给了个初始值是30-210之间的数,步长是210,此时素数2,3,5,7是没有必要参与的,实际上初始值和步长就是有它们和预先给的余数得出的,也就是说,即便你从2开始调取素数(判断条件),被判断值也会通过这些关卡。所以,没有必要让它们参与,这可以从素数表上第m个素数开始调取素数。这是一层不参与筛选的素数(实际上它们已经参与过了);
第二个含义,虽然素数本身符合参与判断的条件(即小于或等于被判断值的开方值),但是到它之前,已经有被判断值对素数求出的余数在已给的余数中了(要么为0,要么为2,要么为6,要么为8,即已给余数中的任何一种),这样内循环就要结束,不需要在对(已有相同余数的素数)后边的素数进行运算和调取了,这就是逻辑判断中适用的规则,一个条件为假,输出假,只有全部为真时,才输出真。如果,在开方前所有素数参与完,还没有相同余数出现,则此被判断值是符合要求的值,输出并保存(就算已获得我们需要的数据),同时计数(在给的被判断值中看一看有哪些符合条件,要求,对符合要求的进行计数并输出保存,此命令或程序最后显示的值是符合条件的被判断值的数量数,个数,对不符合条件的不计数,不输出保存)
 楼主| 发表于 2010-5-11 09:48 | 显示全部楼层

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

你的第6条,我不知是什么意思,实际上被判断值无论是偶数还是奇数对素数取模来说,其余数可以是偶数也可以是奇数。
我提到的意思是,因为被判断的值都是奇数,对条件2求余数,其余数只有可能是0或1,既然给的被判断值都是奇数,那么它们对2的余数只能是1,而在已给的余数中不是0就是偶数,所以素数2就不用参与了,任何一个被判断值都可以通过2这个关卡。
当然根据已给的初始值和步长还可能有这样的素数不需要参与,所以对被判断值第一个调取到的素数不一定就是3(P2),也可能是P3=5(P4=7,P5=11),这是根据具体情况而定的。
 楼主| 发表于 2010-5-11 09:55 | 显示全部楼层

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

[这个贴子最后由白新岭在 2010/05/11 10:29am 第 1 次编辑]

现在用Excel软件来演示一下过程和思路。
预先给的余数有4个0,2,6,8.在30内符合此条件的只有19,即初始值为19,这个初始值和素数模公共周期为30(2*3*5),所以,另被判断值=19+(0+0到n)*30.素数2,3,5已经参与过了,不必再参加了,就从素数7开始,假设现在我们已经判断了前1000个这样的数,现在需要判断第1001个这类型的数是否为我们需要的数,现在对它开方19+1000*30=30019,SQRT(30019)=173.26,即需要对7-173之间的素数进行求余。
可能参与素数→→10019
7→→2
11→→9
13→→9
17→→6
19→→6
23→→14
29→→14
31→→6
37→→29
41→→15
43→→0
47→→8
53→→2
59→→48
61→→15
67→→36
71→→8
73→→18
79→→65
83→→59
89→→51
97→→28
101→→20
103→→28
107→→68
109→→100
113→→75
127→→113
131→→63
137→→18
139→→11
149→→36
151→→53
157→→128
163→→76
167→→166
173→→158
这个数很凑巧,对7的余数就是2,已在预先给的4个余数之中了,所以7以后的素数也就没有必要继续调取了,到此(7)就可以结束了,如果这个余数不是预先给的余数中的数,则需要继续验证,紧接着的素数11和13的余数都是9,通过这两道关卡,继续调入素数17时,其余数为6,在预先给的余数中已有,到此也就结束了。总之,从第一个需要调入素数开始,到它开方前最后一个素数调取时,所有余数都没有在预先给的余数中出现就可以计数并保存该被判断值了,在中间任何一个素数调取后,求余,出现相同余数(指与预先给的余数之一相同)时就可以结束内循环,结束子程序,跳到下一个外循环上去(不需要对这样的被判断值计数,保存)。
先生如果完全理解透了,就请编一个程序试求一下19+(0+0到10万)*30中有多少个数符合条件,预先给的余数为0,2,6,8,即对每一个素数求余后不得与它们的值相同。最小调取的素数是7,即第一个判断条件为素数模7.
 楼主| 发表于 2010-5-11 10:37 | 显示全部楼层

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

你可以与你以前的数据比较,它就是四胞胎素数群,符合条件的每一个值都可以代表一组四胞胎素数,并且是对应组中的最后一个素数,用它-2,-6,-8得到该组其它的3个素数。19可以代表一组,因为素数5的平方是25,它没有被2,3,5筛选掉(MOD(19,2)=1,MOD(19,3)=1,MOD(19,5)=4,皆没有在已给的四个余数中出现(0,2,6,8)。
 楼主| 发表于 2010-5-11 11:06 | 显示全部楼层

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

你以前找四胞胎素数群是在已有的素数表中查找,如果你把这个程序编上,就可以用程序直接运算了,不必到素数表中寻找了。还有,如果通过素数表找,那对于大范围时是无能为力的,我可以手工操作加电算化计算获得100亿内的四胞胎素数表。
从素数表中寻找四胞胎素数基本上是不可能的,因为100亿内的实际素数数量太大,没有很大的硬盘及内存是无法办到的。
 楼主| 发表于 2010-5-11 11:13 | 显示全部楼层

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

因为每类k生素数群的结构和排列顺序不同,预先给的余数个数也不同,k为几,就需要给几个余数(余数是它的排列结构得到的,不是随便给定的)。
之所以限制最多给15个余数,是因为根据简单判断,一般的计算机无法找到15生以上的素数群的实际数据,(因为有效数字的限制和最大计算量级的限制,还有计算速度的限制,硬盘及内存的限制,都是不能实现的原因,虽然我们可以粗略的证明和估算它的大概数量)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-19 15:59 , Processed in 0.080078 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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