篩法求N以內所有質數
阿新 • • 發佈:2019-01-05
題目:打印出給定數N以內的所有質數
解答:
使用篩法求N以內的所有質數
注意:
- 使用bitmap可以減少使用的空間,降低空間複雜度
程式碼:
#include <iostream> #include <string.h> using namespace std; #define MAX 5000 int array[MAX];//使用bitmap void setArray(int i)//設定bitmap位 { array[i / 32] = array[i / 32] | (0x0001 << (i % 32)); } void clrArray(int i)//清楚bitmap位 { array[i / 32] = array[i / 32] ^ (0x0001 << (i % 32)); } bool checkArray(int i)//檢查某位是不是存在數 { if(array[i / 32] & (0x0001 << (i % 32))) return true; return false; } void getNum(int num)//篩法 { if(num < 2) return; for(int i = 2; i <= num; i++) setArray(i); for(int i = 2; i <=num; i++) { if(checkArray(i)) { for(int j = i; j <= num / i; j++) { if(checkArray(i * j)) clrArray(i * j); } } } } int main() { int num; while(1) { cin >> num; getNum(num); for(int i = 2; i <= num; i++) if(checkArray(i)) cout << i << " "; cout << endl; } return 0; }