根据我们对于质数的定义:“设有一个数x除了自身与1的乘积之外无其他的因数,则称为质数”。此处我们列:设有数X∈N+,且有数M,N∈N+,T={Mn|M,N∈N+,1<M≤X,1<N≤X}
若X∈T,则不是质数。
若x∉T,则是质数。
此时,我们容易知道:在可用的因数中,最小的数是2,因此T可二次简化范围:T={Mn|M,N∈N+,2≤M≤[X/2],2≤N≤[X/2]} (此处动用取整函数)
我们将T中数称为区块数表,将N+域中的待选数称为另行数表。(区块:在待选乘积数中的数表/集合。另行:在可能需要筛选的质数的数表/集合)
工作进程
1.初始化:
首先在区块数表中选择 i(i范围建议5~20) 个数进行相乘:
描述:
c++案例:
int a,b,i; while (true) { for (a = 2;a<=c;a++) { for (b= 2;b<=c; b++) { i = a * b; cout << i<<" "; } } if (a == c+1) break;
这样,差于从0到i^2的所有数,留下的数便是第一波底数,纳入另行表中(除了一般数剩下的都是素数)
不断进行这样的操作。此时留下的素数之间不断调出区块互乘
最后以区块的形式进行运算(写到这一段的时候在下已经14小时没睡了,可能写错了,希望得到改正。而且数学基础和计算机的计算原理其实也不是特别好,只是有那么一个想法想分享一下,希望得到大大们的指点和改正)
这样,我们不需要“除”所有数,而是“乘以”已经被我们筛选出来的“净素数”;而素数越到后面会越来越少,因此几乎从10到100,从100到10000的计算量都是十分接近的
但是还有一个问题:对于需要“复数以上的素数相乘”的数应该如何筛选?
在下目前只有2个想法:
1:研究出函数式,挑选出可行脚标的子数列进行计算
2:为另行数列的存在数进行“多维互乘”(在一定条件下多互乘几下,因为在坐标轴上维度真的很高。)(感觉这个更不可行)
但是这个方法可行吗?在设想中可行。不过在下的能力不能让在下证明出来,而且最后可能会变成另一个“哥德尔数”
在狭域内的证明应该只需要在足够大的范围内算出一遍再差于已经计算出的素数集然后判断改正吧
希望有人看