筛选法求素数

来源:互联网 发布:c接收post数据 编辑:程序博客网 时间:2024/05/21 05:59
/*1. 每个合数必有一个最大因子(不包括它本身) ,用这个因子筛选合数
  2.对于每一个数i,乘上 小于等于i的最小素因数 的素数,就得到以i为最大因数的合数。
  3设有一个数t,只要将 所有以比t小的数为最大因数 的合数筛去,

*/

#include<iostream>#include<cstdio>using namespace std;#define N 1000int flag[N + 1] = { 0 }, prime[N + 1] = { 0 }, pnum = 0;//flag标记,值1为质数,0为合数,prime存储素数int main(){    int i = 0, j = 0,num=0;for (i = 0; i <= N; i++)flag[i] = 1;//初始默认为素数,这样好从2开始为素数for (i = 2; i <= N; i++){if (flag[i])prime[pnum++] = i;//素数依次单调递增//遍历已知素数表中比i的分解因式的最小素因数小的素数,并筛去合数for (j = 0; j < pnum&&prime[j] * i <= N; j++){flag[prime[j] * i] = 0;if (i%prime[j] == 0)break;//素数不断增长,到达i的最小素因数了}}return 0;} 


0 0