前言:
目前同学们对“生成大素数算法”大约比较着重,同学们都想要剖析一些“生成大素数算法”的相关资讯。那么小编在网摘上搜集了一些关于“生成大素数算法””的相关知识,希望姐妹们能喜欢,大家快快来学习一下吧!一、基本内容
三生原理本质上是一条简明的素数通项公式,基本内容如下:
任意不小于5的奇数p可表为:
p=3(2n+1)+2(2n+m+1)
n∈N,m={0,1,2,3,4} ,
则p为素数当且仅当同时满足以下两个条件:
①3(2n+1)与2(2n+m+1)互素;
②
<p0(n=0、m=0),或当
≥…>pi(n、m不为0)>…p2>p1>p0(i=0、1、2…,pi满足条件①②)时p与pi互素。
二、一个例图
举例列表说明利用三生原理生成100以内素数的过程方法如下:
插入的例图较小,可直接看知乎原文链接:
三、编程代码
有赖一位知乎朋友(昵称:空白)支持提供了一段代码,即三生原理C++代码实现(时间复杂度O(n*sqrt(n),空间复杂度O(n))):
(知乎原文链接:)
#include<cstdio>#include<algorithm>using std::__gcd;int p[100000]={2,3},pos1=2,pos2=1;int main(){ for(int n=0;n<=10000;++n){ int t=3*(2*n+1); for(int m=0;m<5;++m){ int d=2*(2*n+m+1),p1=t+d; if(__gcd(t,d)>1)continue; if(p1>p[pos2]*p[pos2]/p1){ if(pos2<pos1-1&&p1>p[pos2+1]*p[pos2+1]/p1) ++pos2; for(int i=0;i<=pos2;++i) if(__gcd(p1,p[i])>1)goto notp; p[pos1++]=p1; printf("%d ",p1),_sleep(30); } notp:; } } getchar();}
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。
标签: #生成大素数算法 #生成大素数算法实验报告