筛法求素数

筛法求素数

#include<iostream>
#include<stdio.h>
using namespace std;
#define MAX_NUM  10000000
char isPrime[MAX_NUM+10];//最终如果isPrime[i] = 1,则表示i是素数,大数组要定义在main函数外面 
//筛法求素(质)数 
int main(){
	for(int i = 0;i <= MAX_NUM;i++){
		isPrime[i] = 1; //开始假设所有数都是素数 
	}
	for(int i = 2;i <= MAX_NUM;i++){ //每次将一个素数的所有倍数标记为非素数 
		if(isPrime[i]){ //只标记素数的倍数  isPrime[i]<=>isPrime[i] == 1
			for(int j = 2 * i;j <= MAX_NUM;j += i){ //从二倍开始标记素数的倍数为非素数 
				isPrime[j] = 0; 
			} 
		}
	}
	for(int i = 2;i <= MAX_NUM;i++){
		if(isPrime[i]){
			cout << i <<",";
		}
	} 
} 

其他方法求素数

输入正整数n(n>=2),求不大于n的全部质数

#include<iostream>
#include<stdio.h>
using namespace std;
//输入正整数n(n>=2),求不大于n的全部质数 
int main(){
	int n; 
	cin >> n;
	cout << 2 <<",";
	//除2以外的所有偶数都不是质数,可以排除
	for(int i = 3;i <= n;i += 2){
		//判断i是否有除1意外的因子 
		int k;
		for( k = 3;k < i;k += 2){
			if(i%k == 0){
				break;
			} 
			//k自增到根号k后就没必要再增了 
			if(k*k > i){
			 break; 
		}
	} 
	//输出从第二个if语句跳出循环时的i的值 
	        if(k*k > i){
	        cout << i <<",";
			}
	
	
}
} 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值