P5736【深基7.例2】质数筛 题解

清风雪月

2021-09-23 20:59:50

Personal

第二篇不可提交的题解 ------------ 这是一道筛素数的~~水~~题 ------------ 进入正题\ 这里的话我用的是比较普通的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; } ```