題意:有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...