一般的筛法求素数
/*
筛法求素数
*/
#include<stdio.h>
#include<string.h>
int main(){
int num = 20000;
int prime[num] = {};
int isprime[num] = {};
int i = 0,count = 0,k = 0;
prime[0] = 1;
prime[1] = 1;
for(i = 2;i < num;i++){
if(!prime[i]){
isprime[count++] = i;
}
for(k = i*i;k < num;k+=i){
isprime[k] = 1;
}
}
return 0;
}
减少运行时间,提高效率的筛法求素数
/*
筛法求素数
*/
#include<stdio.h>
#include<string.h>
int main(){
int num = 20000;
int prime[num] = {};
int isprime[num] = {};
int count = 0,k = 0,j = 0;
prime[0] = 1;
prime[1] = 1;
for(i = 2;i < num;i++){
if(!prime[i]){
isprime[count++] = i;
}
for(k = 0;k < count && i * isprime[k];k++){
isprime[k*isprime[k]] = 1;
if(!(i % isprime[k])) break;
}
}
return 0;
}
证明: