输出n以内的所有素数
素数筛法:
- 开一个长度为n+1的boolean数组prime[]
- 将所有奇数置为true,偶数置为false
- 从 i = 3 开始至 i <= sqrt(n) 开始判断奇数
如果prime[i]为true,则说明当前数为素数,则它的倍数必然是非素数,因此令 j = 2*i 至 j <= n ,将 i的倍数 置为false
补充int isPrime[n+1]; // 初始化 isPrime[0] = isPrime[1] = 0; isPrime[2] = 1; for(int i=3; i<n+1; i++){ if(i%2 == 0) isPrime[i] = 0; else isPrime[i] = 1; } for(int i=3; i<=sqrt(n); i++){ if(isPrime[i]) for(int j=2*i; j<=n; j+=i) isPrime[j] = 0; }
计算一个数是否是素数只用判断到sqrt(n)的原因:
因为如果一个数不是质数那么它是两个数的乘积。这两个数一定有一个小于等于sqrt(),因此只要找较小的因子就可以了。