素数筛选法--快速查找素数

来源:互联网 发布:流程优化跟我学 pdf 编辑:程序博客网 时间:2024/06/09 06:12

快速查找素数

时间限制:1000 ms  |  内存限制:65535 KB
难度:3
描述
现在给你一个正整数N,要你快速的找出在2.....N这些数里面所有的素数。
输入
给出一个正整数数N(N<=2000000)
但N为0时结束程序。
测试数据不超过100组
输出
将2~N范围内所有的素数输出。两个数之间用空格隔开
样例输入
510110
样例输出
2 3 52 3 5 72 3 5 7 11
来源
经典题
上传者

路过这


思路:素数筛选法筛选出2000001之前的所有素数,为了省时,筛选时不考虑偶数,判断是单拿出来判断。筛选后是奇数且prime数组标记为1的是素数。

#include<stdio.h>#include<string.h>int prime[2000001];int main(){int n, i, j;memset(prime, 1, sizeof(prime));for(i = 3; i < 2000001; i += 2){if(prime[i]){for(j = i + i; j < 2000001; j += i)prime[j] = 0;}}while(scanf("%d", &n), n){if(n == 2){printf("2\n");continue;}if(n > 2)printf("2 ");for(i = 3; i <= n; i += 2){if(i == 2 || i % 2 != 0 && prime[i]){printf("%d ", i);}}printf("\n");}return 0;}


0 0
原创粉丝点击