ZKX's LAB

埃拉托斯特尼筛法的c++实现 埃拉托斯特尼筛法6

2021-03-08知识10

埃拉托斯特尼发明的”素数筛子’? 埃氏筛埃氏筛,是埃2113拉托斯特尼筛法的简5261称,是由埃及数学家埃拉托斯4102特尼所提出的1653一种简单检定素数的一种方法。大概思路如下:自然数可分成1、素数、合数这三类,一定范围内的自然数中,哪些数是素数呢?古时候,希腊有位叫做埃拉多染尼的数学家想出了如下办法:当时,他将1000内的自然数依次写在一块硬方格板上,然后用2试除各数,将能被整除的都用刀子剜掉;继2之后再用3来如此而行;3之后再用5来如此而行…这样一直进行到无法进行而为止,最后再剜掉1。于是,剩下的没能被剜掉的数便是1000内的素数。由于得到的是张像筛子一样的图,所以,人们便将这种方法叫做埃拉多染尼筛法。具体例子如下:第一步,列出如下这样以2开头的序列:2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25第二步,标出序列中的第一个素数,主序列变成:3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25第三步,将剩下序列中,第二项开始每隔一项划掉(2的倍数,用红色标出。主序列变成:3 5 7 9 11 13 15 17 19 21 23 25第四步,如果现在这个序列中最大数小于第一个素数的平方,那么剩下的序列中所有的数都是素数,否则返回第二步。。

什么叫“筛法” “筛法”是一种求质数的方法。是公元前。由古希腊著名数学家埃拉托色尼提出的,所以,也叫埃拉托色尼筛法。

什么是埃拉托斯特尼筛法?

埃拉托斯特尼筛法的算式

筛法的介绍 筛法是一种简单检定素数的算法。据说是古希腊的埃拉托斯特尼(Eratosthenes,约公元前274~194年)发明的,又称埃拉托斯特尼筛法(sieve of Eratosthenes)。

检查一个正整数N是否为素数,最简单的方法就是试除法,将该数N用小于等于根号N的所有素数去试除,若均无法整除,则N为素数 利用反证法:假设这样筛出来的N是合数,且不能被小于等于其平方根的所有素数整除,那么N一定能被大于其平方根小于其本身的某个素数整除.记该素数为M,则√N

埃拉托斯特尼筛法的c++实现 #include<;iostream>;#include<;cstdio>;#include<;cmath>;#include<;cstring>;#include<;vector>;#include<;algorithm>;usingnamespacestd;constlonglongmaxn=10000007+10;constlonglongmaxp=700000;intvis[maxn];i是合数vis为1,i是素数,vis为0longlongprime[maxp];voidsieve(longlongn){longlongm=(longlong)sqrt(n+0.5);memset(vis,0,sizeof(vis));vis[2]=0;for(longlongi=3;i;i=i+2){if。vis[i])for(longlongj=i*i;j;j+i)vis[j]=1;if(i*i>;n)break;}}longlonggen(longlongn){sieve(n);longlongc=1;prime[0]=2;for(longlongi=3;i;i=i+2)if。vis[i])prime[c++]=i;returnc;}int main(){ freopen(in.in,r,stdin);freopen(biao.out,w,stdout);longlongn,c;cout刷素数到n:;cin>;>;n;c=gen(n);for(longlongi=0;i;i+)printf(%lld,prime[i]);cout;return0;}

什么是筛法

埃拉托斯特尼筛法的c++实现 埃拉托斯特尼筛法6

#埃拉托斯特尼筛法6

随机阅读

qrcode
访问手机版