P5736【深基7.例2】质数筛 题解
清风雪月
2021-09-23 20:59:50
第二篇不可提交的题解
------------
这是一道筛素数的~~水~~题
------------
进入正题\
这里的话我用的是比较普通的for循环,因此主要提醒大家一点,就是平常的判断是不会筛掉0和1的,有的朋友可能得了80分,但是找不到原因,就是因为这个,如果你发现你也出现了,请看下面这条代码\
if(a==1||a==0) return 0;\
因为我是写了一个函数,所以用return,当然你不想用也可以,我建议是换成continue,这里注意,break是结束循环,continue是停止本次循环,不要用错了,完整的程序判断如下
```
bool pd(int a)
{
if(a==1||a==0) return 0;
for(int i=2;i<=sqrt(a);i++)
{
if(a%i==0)return 0;
}
return 1;
}
```
------------
讲到这里差不多了,有需要的朋友可以拿下面的代码,不过拿之前希望你能认真看完上面的解析
------------
```
//~柠月~
#include<bits/stdc++.h>
using namespace std;
int n,a[101],b[101],g;//g是代表素数的个数
bool pd(int a)//筛素数
{
if(a==1||a==0) return 0;
for(int i=2;i<=sqrt(a);i++)
{
if(a%i==0)return 0;
}
return 1;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<=n;i++)
{
if(a[i]==2)
{
g++;
b[g]=a[i];continue;
}
if(pd(a[i])==true)
{
g++;
b[g]=a[i];
}
}
for(int i=1;i<=g;i++)cout<<b[i]<<" ";
return 0;
}
```