Hankson的趣味題 (演算法競賽高階指南,約數)

2021-10-02 15:21:38 字數 988 閱讀 7317

已知 (a0, x) = a1, [b0, x] = b1

求滿足上式 x 解的個數.

因為 [b0, x] = b1,所以 x 為 b1 的約數

又 b1 最多只有 10 個質因子,所以我們可以考慮 x 的質因子組成.

當前正在考慮質因子 p

設 m[0] 表示 a0 含 p 的個數,m[1] 表示 a1 含 p 的個數,

m[2] 表示 b0 含 p 的個數,m[3] 表示 b1 含 p 的個數,ans 表示 x 含 p 的個數.

若 m[0] < m[1], 則 ans 無解;若 m[0] == m[1], 則 ans >= m[1];若 m[0] > m[1], 則 ans == m[1].

若 m[2] < m[3], 則 ans == m[3];若 m[2] == m[3], 則 ans <= m[1];若 m[2] > m[3], 則 ans 無解.

因此只需打出素數表然後列舉素數即可.

注意:1. 如果 b1 % prime[i],應該 continue,因為 b1 最多只有 10 個不同的質因子,這樣可以剪去絕大多數情況.

2. 列舉完所有素數後,若 b1 > 1,即 b1 是質數,應再計算 b1 因子的方案數.

#include using namespace std;

const int m = (int)45000;

int prime[m + 5], cnt;

bool is_prime[m + 5];

int a0, a1, b0, b1;

void get_prime()

}}void divide(int& m, int& n, int p)

}int work(int p)

int main()

if(b1 > 1) ans *= work(b1);

printf("%d\n", ans);

}return 0;

}

Hankson的趣味題

問題描述 hanks博士是bt bio tech,生物技術 領域的知名專家,他的兒子名叫hankson。現在,剛剛放學回家的hankson正在思考乙個有趣的問題。今天在課堂上,老師講解了如何求兩個正整數c1和c2的最大公約數和最小公倍數。現在hankson認為自己已經熟練地掌握了這些知識,他開始思考...

MySQL趣味題 Hankson的趣味題

思路 由於x是b1的約數,所以x的質因子一定也是b1的質因子,我們可以對b1的每個質因子p,分別計算a0,a1,b0,b1分別 包含多少個p.然後討論x可能含有幾個p即可 include include include include include include using namespace ...

Hankson的趣味題(藍橋杯)

時間限制 1 sec 記憶體限制 128 mb 提交 命題人 外部匯入 題目描述hanks 博士是bt bio tech,生物技術 領域的知名專家,他的兒子名叫hankson。現 在,剛剛放學回家的hankson 正在思考乙個有趣的問題。今天在課堂上,老師講解了如何求兩個正整數c1 和c2 的最大公...