代码:
#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;