C/C++中的素数筛选

~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~

Examination Problem

      质数(prime number)又称素数,有无限个。质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数的数称为质数。

      判断101-200之间有多少个素数,并输出所有素数。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Analysis

      程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。  

      在一般领域,对正整数n,如果用2到根号n之间的所有整数去除,均无法整除,则n为质数。

      质数大于等于2不能被它本身和1以外的数整除    

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Program

#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
const long long size=100000;//修改size的数值以改变最终输出的大小
 
long long zhishu[size/2];
void work(){//主要程序
    zhishu[1]=2;
    long long k=2;
    for(long long i=3;i<=size;i++){//枚举每个数
        bool ok=1;
        for(long long j=1;j<k;j++){//枚举已经得到的质数
            if(i%zhishu[j]==0){
                ok=!ok;
                break;
            }
        }
        if(ok){
            zhishu[k]=i;
            cout<<"count"<<k<<' '<<i<<endl;
            k++;
        }
    }
}
 
 
int main(){
    freopen("zhishu.out","w",stdout);
    cout<<"count1 2"<<endl;
    work();
    return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
bool isPrime(unsigned long n) {
    if (n <= 3) {
        return n > 1;
    } else if (n % 2 == 0 || n % 3 == 0) {
        return false;
    } else {
        for (unsigned short i = 5; i * i <= n; i += 6) {
            if (n % i == 0 || n % (i + 2) == 0) {
                return false;
            }
        }
        return true;
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值