1. 程式人生 > >演算法OJ—篩法生成素數

演算法OJ—篩法生成素數

篩法(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;
        }
    }
}