筛法(Sieve Method)
时限:1000ms 内存限制:10000K 总时限:3000ms
描述:
用筛法求[a,b]中的素数。
Find out the prime numbers in [a, b].
输入:
2个正整数:a b。
a、b均在1000以内,且a小于等于b。
2 positive integers: a, b. Both a and b are less than or equal 1000 and a is less than or equal to b.
输出:
[a b]区间内的所有素数,每个单独一行。
All primes in [a, b], each one in a row.
输入样例:
2 5
输出样例:
2
3
5
计算素数通常的思路是在一个区间内通过将n/sqrt(n)来进行求解,时间复杂度较高复杂度为O(n * sqrt(n)),对于大范围内的数值求解比较浪费时间。通过筛法求素数可以提高程序执行的效率。
#include<iostream>
using namespace std;
int arr[1002] = {0};
void initPrime(int a,int b){
int pos;
int div = 2;
while(div < b){
for(pos = a; pos <= b; pos++){
if(pos % div == 0 && div != pos){
arr[pos] = 1;
}
}
div++;
}
}
int main(){
int a, b;
cin >> a >> b;
int i;
initPrime(a, b);
arr[1] = 1;
for(i = a; i <= b; i++){
if(arr[i] == 0){
cout << i << endl;
}
}
}