HDU 3823 埃式篩法打表

2022-06-03 08:18:11 字數 771 閱讀 4128

題意:有t個樣例,每個樣例輸入兩個數 a 和 b,讓你找到乙個數,使得 a + x = c, b + x = d, c 和 d

是質數並且相鄰。

解法:打素數表(埃式篩法)

不成立: (b - a)&1

或 b == a

成立:

特殊: a = 1 , b = 2, ans = 1;

a = 2, b = 3, ans = 0;

(c != a, d != b, b - a = d - c ) && b <= d,  ans = d - b;

#include #include #include #include #include using namespace std;

const int n = 2e7 + 7;

bool vis[n];

int primes[n];

int idx;

int t,a,b;

void prime() //打表

}}int main()

if(a == 2 && b == 3)

if(c & 1 || a == b)

else}}

}return 0;

}

埃式篩法 尤拉篩法

埃氏篩法是通過從小到大篩去乙個已知素數的倍數進而實現篩選的。假如我們想篩掉1 100間的所有合數,步驟如下 2是質數,篩掉所有2的倍數 3是質數,篩掉所有3的倍數 4不是質數,跳過 5是質數,篩掉所有5的倍數 6不是質數,跳過 7是質數,篩掉所有7的倍數 8不是質數,跳過 9不是質數,跳過 10不是...

埃式篩法 快速冪運算

應用 對很多整數進行素性測試 要列舉n以內的素數 思路 2 n範圍內的所有整數,依次遍歷。遍歷過程中如果該數是素數則將其的倍數都劃去 可以想象他的倍數一定為非素數 遍歷完成後。就可以列舉n以內的素數了。模板 void sieve int n for int i 2 i n i 依次遍歷 printf...

素數篩法打表

篩法打素數表是一種高效的打表方法,具體做法是 先把n個自然數按次序排列起來。1不是質數,也不是合數,要划去。第二個數2是質數留下來,而把2後面所有能被2整除的數都劃去。2後面第乙個沒劃去的數是3,把3留下,再把3後面所有能被3整除的數都劃去。3後面第乙個沒劃去的數是5,把5留下,再把5後面所有能被5...