求100万内素数

代码:

#define SIZE 1000000
long prime[SIZE];  //保存求得的素数
prime[0] = 2;
prime[1] = 3;
long index = 2;
int isPrime;
for(long n = 4; n < SIZE; n++){
    if(n%2 == 0 || n%3 == 0)
        continue;
    isPrime = 1;
    for(long i = 0; prime[i] <= sqrt(n) && i < index; i++){  //注意循环结束条件
        if(n%prime[i] == 0){  //除数为数组prime内的元素,index为prime的上限
            isPrime = 0;
            break;        
        }    
    }
    if(isPrime == 1){        
        prime[index] = n;
        index++;    
    }
}

Tips:
  • 设置flag变量isPrime,若能被整除,则flag=0且循环结束;否则一直为1不变。整个循环完成后根据这个flag变量判断是否为素数
  • 判断整数n是否未素数时,其除数范围不是2~n-1的所有整数,而是2~sqrt(n)内的所有素数(考虑乘法交换律以及合数的定义,这两点很大地提高了效率)
  • 在进行1,2两条之前,先进行如下判断能筛掉大量的合数,提高效率

if(n%2 == 0 || n%3 == 0)
    continue;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值