C/C++筛选法算素数

小说:为什么说,男人天生就是“大色狼”作者:帝卓龙更新时间:2019-03-25字数:81671

什么是求素数

)i在2到n-1之间任取一个数,如果n能被整除则不是素数,否则就是素数

普通枚举法:

#include <iostream>
#include <string>
#include <cmath>
#include <cstring>
using namespace std;

bool isPlain(int x){
    if(x<2) return false;
    else{
        for(int i=2;i<x;i++)
        {
            if(!(x%i))
                return false;
        }
    }
    return true;
}

int main()
{
    int n;
    cin>>n;
    int cot=0;
    for(int j=0;j<n;j++){
        if(isPlain(j)){
           cout<<j<<((++cot%7==0)?"
":"	");
        }
    }

}

筛选法:

  • 原始版本:
#include <iostream>
#include <string>
#include <cmath>
#include <cstring>
using namespace std;


int main()
{
    int n;
    cin>>n;
    bool* ans=new bool[n];
    memset(ans,true,sizeof(bool)*n);//
    ans[0]=false;
    ans[1]=false;
    for(int i=2;i<n;i++){
        if(ans[i]){
            for(int j=i*2;j<n;j+=i){//倍数取整
                ans[j]=false;
            }
        }
    }
    int col = 0;
    for(int i=0;i<n;i++){
        if(ans[i]){
            cout<<i<<" ";
        }
    }
    return 0;
}
  • 改进版本
#include <iostream>
#include <string>
#include <cmath>
#include <cstring>
#include <bitset>
using namespace std;

int main()
{
    int n;
    cin>>n;
    bitset<100000> ans;
    ans.set(0);
    ans.set(1);
    for(int j=2; j<=sqrt(n); j++)
    {
        for(int i=2*j; i < n; i+=j)
        {
            ans.set(i);
        }
    }
    int cot=0;
    for(int i=0; i<n; i++)
    {
        if(ans[i]!=1)
        {
            cout<<i<<((++cot%7==0)?"
":"	");
        }
    }

}

当前文章:http://leetaemin.cn/2018u6asd8ojeb/index.html

发布时间:2019-03-25 02:28:28

塞卡病毒来袭,我们不可不防 当父母在做这十件事时,请让孩子看见 奔向未来的日子 看《芈月传》,你需要先知道的历史知识 怎样才能找到一位好的整形医生——保证安全和效果 妹子说的那些最伤男人的话 吉祥中国梵呗音乐会朗诵词 英国托欧,油价何去何从? 约炮后,姑娘动心了 油气是怎么被找到的?

18317 94490 19149 44183 71354 10885 10134 15023 26488 98869 64298 33483 37345 88610 44223 10346 88516 73791 74083 80049 58372 64741 97592

我要说两句: (0人参与)

发布