求素数
Posted sumaywlx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求素数相关的知识,希望对你有一定的参考价值。
求证:任何一个大于3的质数加一或减一必然是6的倍数
每三个连续的数之中必有一个是3倍数
设这个质数叫a,a肯定为无为3的倍数的奇数(因为是个质数)
那么a-1,a+1其中必有1个是3的倍数
显然a-1和a+1都是偶数 即2的倍数
所以其中必有一个为2的倍数且为3的倍数的数
即有6的倍数
#include<iostream> using namespce std; #define MAX_NUM 10000 int a[MAX_NUM+1];//isprime[MAX_NUM] //nlogn void is_prime_1(void){ //memset(a,1,sizeof(a));//用for改写初始化 for(int i=2;i<=MAX_NUM ;i++){ a[i]=1; } for(int i=2;i<MAX_NUM;i++){ if(a[i] == 1){ for(int j=i*2;j<=N;j+=i){ a[j]=0; } } } } //线性筛多开了一个存素数的数组吖 int a[MAXSIZE];//下标是素数,关注下标的含义,直接寻址哈希,统计性质 int prime[MAXSIZE];//存素数即a中的下标 int is_prime_2(){ int index=0; memset(a,1,sizeof(mark));//简写,实际上只能初始化0,-1 for(int i=2;i<MAXSIZE;i++){ if(a[i]==1){ prime[index++]=i; } for(int j=0;j<index && prime[j]*i<MAXSIZE;j++){ a[i*prime[j]]=0; if(i%prime[j]==0){ break; } } } return index;//处理了N以内所有的素数,0~index-1为所有素数的索引下标 } //6倍筛法 bool is_prime_3(int x){ int i; if( x == 2 || x == 3 || x == 5 ) return 1; if( x%2 == 0 || x%3 == 0 ) /*判断是否为2,3的倍数*/ return 0; for( i=6; i<=sqrt(x); i += 6 ){ if( x%(i+1) == 0 || x%( i+5 ) == 0 ) return 0; } return true ; } bool is_prime_4(int x){ for(int i= 2;i< sqrt(x);i++){ if(n % i == 0) return false; } return ture; }
2:
https://blog.csdn.net/dl962454/article/details/76595623
https://www.cnblogs.com/Paul-Guderian/p/7723031.html
3:
https://blog.csdn.net/qq_36523667/article/details/78545682
https://www.baidu.com/baidu?tn=monline_3_dg&ie=utf-8&wd=%E5%A4%A7%E4%BA%8E%E7%AD%89%E4%BA%8E5%E7%9A%84%E8%B4%A8%E6%95%B0%E4%B8%80%E5%AE%9A%E5%92%8C6%E7%9A%84%E5%80%8D%E6%95%B0%E7%9B%B8%E9%82%BB
---------------------
https://www.luogu.org/problemnew/show/P1217
https://www.luogu.org/problemnew/solution/P1217
https://www.luogu.org/problemnew/solution/P3383
以上是关于求素数的主要内容,如果未能解决你的问题,请参考以下文章