在我们求一个区间内的素数时,最普通的方法是:
int is_prime(int m, int n) {
for(int i = m; i <= n; i++) {
int flag = 0;
for(int j = 2; j <= sqrt((double)i); j++) {
if(i%j==0) flag = 1;
}
if(flag==0) printf("%d ",i);
}
}
在我们求小区间是可以使用,但是如果要求大区间的内,比如1-10000或1-100000的内,就应该考虑素数筛了:
int visited[inf];
int SuShuShai(int m, int n) {
memset(visited,0,sizeof(visited));
visited[0] = 1;
visited[1] = 1;
//注意要用长整形
for(long i = 2; i <= sqrt((double)n); i++) {
if(!visited[i]) {
//i的倍数都可以筛选掉
for(long j = i*i; j<=n; j+=i)
visited[j] = 1;
}
}
for(int i = m; i <= n; i++) {
if(!visited[i])
printf("%ld ",i);
}
}
算法可以优化但这里就先不考虑了
下面我们来测一下时间,用三组即可:
1-1000数据太小,所以无可比性
1-10000差距就出来了,再看一组
1-500000的差距em可以看出了,可能我测的不太准确,但是可以参考一下