埃拉托斯特尼筛法求素数,埃拉托色尼筛法算法
算法的思想非常简单。找一个表,先划掉1,再划掉2的倍数,然后找到下一个没划掉的数,也就是3,再划掉3的倍数,再找到下一个没划掉的数,也就是5,再划掉5的倍数,再找到下一个没划掉的数,以此类推。被划掉的数不是质数,但被划掉的数是质数。
#包括iostream
#包括cstdio
#包含cstdlib
#包含算法
#包括队列
#包括堆栈
#包含地图
#包括cstring
#包括限制
#包含cmath
#包括cctype
const int INF=0x 3 F3 F3 f 3 f;//1061109567
typedef long long ll
#定义埃尔松左,中,右1
#定义rson m 1,r,rt 11
使用命名空间std
int prime[1000];
int is prime[10000];
int k=0;
void doprime(int n)
{
for(int I=2;I=n;我)
{
if(isprime[i]==0)
{
素数[k]=I;
for(int j=I * I;j=n;j=I)//2 I和I的乘积在i-1之前已经画出来了,就从I * I开始吧,很多题都是在这个模板上做的,但是第二个循环就不一样了。
{
is prime[j]=1;
}
}
}
}
int main()
{
memset(isprime,0,sizeof(is prime));
doprime(1000);
int n;
while(scanf(%d ,n)!=EOF)
{
if(isprime[n]==0)
{
printf( yes \ n );
}
其他
{
printf( no \ n );
}
}
返回0;
}上面的模板不仅可以判断1000以内的数是否是质数,1000以内的所有质数都存储在质数数组中。
如果只问1000以内的数是不是质数,下面这个就省时间了。
#包括iostream
#包括cstdio
#包含cstdlib
#包含算法
#包括队列
#包括堆栈
#包含地图
#包括cstring
#包括限制
#包含cmath
#包括cctype
const int INF=0x 3 F3 F3 f 3 f;//1061109567
typedef long long ll
#定义埃尔松左,中,右1
#定义rson m 1,r,rt 11
使用命名空间std
int is prime[10000];
void doprime(int n)
{
for(int I=2;I * I=n;I )//注意这里小于等于。比如n为25,不等于就会出错。
{
if(isprime[i]==0)
{
for(int j=I * I;j=n;j=i)
{
is prime[j]=1;
}
}
}
}
int main()
{
memset(isprime,0,sizeof(is prime));
doprime(1000);
int n;
while(scanf(%d ,n)!=EOF)
{
if(isprime[n]==0)
{
printf( yes \ n );
}
其他
{
printf( no \ n );
}
}
返回0;
}
版权归作者所有:原创作品来自博主MB 62A10 DE EFD 92,转载请联系作者获得授权,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。