演算法OJ—篩法生成素數
阿新 • • 發佈:2018-12-10
篩法(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; } } }