首页 > 其他分享 >最快素数打表,比欧拉筛快一倍。

最快素数打表,比欧拉筛快一倍。

时间:2023-02-20 22:01:53浏览次数:39  
标签:孪生 clock int 素数 打表 1e7 筛快 欧拉

1e7内比欧拉筛子快一倍,2e7持平,之后略慢 不论N多大整体计算次数,都是欧拉筛子的1/3,求大神解答1e8之后为什么变慢
思路:相较于欧拉筛考虑1-n所有数,这里基于孪生素数,只需要考虑孪生素数,n/3;

点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N=1e7+9;
bool a[N+2];
int b[N+2];
int idx=0;
int w=0,s;
clock_t startTime;
int getCurrentTime() {
	return 1000.0 * (clock() - startTime) / CLOCKS_PER_SEC;
}
void init(int N){//孪生素数
	a[3]=a[2]=true; 
	for(int i=5;i<N;i+=6) a[i+2]=a[i]=true;
	for(int i=5;i<=N/5;i+=6){
		b[idx++]=i;
		b[idx++]=i+2;
	}
	for(int i=0;i<idx;i++)
		for(int j=0;j<=i&&b[j]*b[i]<N;j++)
			a[b[i]*b[j]]=false;
	
}
bool prime[N];
int p[N], tot;
void init2(int N){//欧拉 
    for(int i = 2; i < N; i ++) prime[i] = true;//w++;
    for(int i = 2; i < N; i++){
        if(prime[i]) p[tot ++] = i;
        for(int j = 0; j < tot && i * p[j] < N; j++){
            prime[i * p[j]] = false;// w++;
            if(i % p[j] == 0) break; //w++;
        }
    }
}
int main()
{
	int n;
	
	init(N);	
	cout<<"my   :"<<w<<endl;
	cerr << "Execution time: " << getCurrentTime() << " ms." << endl;	
	init2(N);
	cout<<"欧拉 :"<<w<<endl;
	cerr << "Execution time: " << getCurrentTime() << " ms." << endl;
	
	
	
	return 0;
 } 

标签:孪生,clock,int,素数,打表,1e7,筛快,欧拉
From: https://www.cnblogs.com/xxj112/p/17139100.html

相关文章

  • 等差素数列
    等差素数列题目描述本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。2,3,5,7,11,13,...是素数序列。类似:7,37,67,97,127,157这样完全由素数组......
  • PAT-basic-1007 素数对猜想 java
    一、题目让我们定义dn为:dn=p(n+1)−p~n,其中pi是第i个素数。显然有d1=1,且对于n>1有dn是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。现给定任意......
  • 素数的埃式筛选法
    constintN=1e7;intprime[N];//第i个素数boolis_prime[N];intsieve(intn){intcnt=0;for(inti=0;i<=n+1;i++){is_prime[i]=true;}is_p......
  • C语言填空:100-200所有素数输出,并且一行7个
    #include<stdio.h>//输出100-200间所有的素数,且一行只打印7个数main(){intnum,i,t,count;【1】;for(num=100;num<=200;num++){【1】;......
  • 找素数(java)
    什么是素数?质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数(规定1既不是质数也不是合数)。实际案例比如我们想找出1-1000......
  • 求1—200间素数
    判断1~200之间素数,并输出所有素数。 publicclassTest{publicstaticvoidmain(String[]args){for(inti=1;i<200;i++){intnum......
  • 【一句话证明】奇素数能表示为两平方和当且仅模4余1
    Bilibili视频不卖关子,一句话(设这个模4余1的素数为\(p\)):定义在有限集\(S=\{(x,y,z)\in\mathbbN^3:x^2+4yz=p\}\)上的对合(involution)\[(x,y,z)\to\begin{cases}(x......
  • 密码学简单数论笔记(1):素数和模运算
      参考资料:1.https://www.bilibili.com/video/BV1x3411s7Sy/?spm_id_from=333.788&vd_source=e66dd25b0246f28e772d75f11c80f03c2.余红兵:《数学奥林匹克小丛书(第二版)......
  • 算法刷题-求素数、数据流的中位数、不同的二叉搜索树
    求素数求1-100内的素数:publicstaticvoidmain(String[]args){for(inti=0;i<100;i++){checkPrime(i);}}privatestaticvo......
  • Java—求素数
    定义:素数又称质数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数(规定1既不是质数也不是合数)代码:package练习;importjava.util.Scann......