专业的编程技术博客社区

网站首页 > 博客文章 正文

《论三生原理》例:利用三生原理生成100以内素数

baijin 2024-08-31 16:13:22 博客文章 3 ℃ 0 评论

一、基本内容

三生原理本质上是一条简明的素数通项公式,基本内容如下:

任意不小于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以内素数的过程方法如下:

插入的例图较小,可直接看知乎原文链接:https://zhuanlan.zhihu.com/p/443024580

三、编程代码

有赖一位知乎朋友(昵称:空白)支持提供了一段代码,即三生原理C++代码实现(时间复杂度O(n*sqrt(n),空间复杂度O(n))):

(知乎原文链接:https://zhuanlan.zhihu.com/p/653990991)

#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();
}

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表