素數表生成

2021-07-05 06:48:51 字數 503 閱讀 5827

素數表生成

const

int maxn=10000000+10;

const

int maxp = 700000;

#include int vis[maxn] //vis[i] = 1 則i是合數;vis[i] = 0,則i是1或者素數

int p[maxp]

//篩素數

void sieve(int n) }}

}//生成素數表,放在prime陣列中,返回素數個數

int gen_primes(int n)

最核心的部分

for (int i = 2; i <= m; i++) if (!vis[i]) {

for (j = i * i; j <= n; j += i) vis[j] = 1;

j 從i*i列舉而不從i*2列舉

由於i是從小到大列舉,所以之前必然經過i*(i-1,i-2……3,2)

由此節省了時間

簡單素數表

描述 編寫程式,求任意兩個整數之間所有的素數。輸入 兩個整型資料,a,b,均大於等於2,小於等於1000,且a小於等於b 輸出 輸出兩個整數之間 包含自身 所有的素數 輸入樣例 2 11 輸出樣例 235 711 includeusing namespace std int main int a,b...

素數距離問題(素數表)

時間限制 3000 ms 記憶體限制 65535 kb 難度 2 描述現在給出你一些數,要求你寫出乙個程式,輸出這些整數相鄰最近的素數,並輸出其相距長度。如果左右有等距離長度素數,則輸出左側的值及相應距離。如果輸入的整數本身就是素數,則輸出該素數本身,距離輸出0 輸入 第一行給出測試資料組數n 0輸...

利用線性篩法生成素數表

一.問題背景 對任意整數i 2,n 指出i為質數還是合數。其中輸入整數n滿足2 n 1e6.二.解決方案 1.樸素演算法 試除法 判斷x是否為素數,則列舉i 2,x 1 如果不存在i能整除x,則x為素數。顯然,列舉量可以縮小至 2,sqrt x 時間複雜度 o n 1.5 對於n 1e6,運算量達十...