NOIP09 Hankson的趣味題

2022-05-31 11:57:08 字數 2487 閱讀 4252

hanks 博士是bt (bio-tech,生物技術) 領域的知名專家,他的兒子名叫hankson。現在,剛剛放學回家的hankson 正在思考乙個有趣的問題。

今天在課堂上,老師講解了如何求兩個正整數c1 和c2 的最大公約數和最小公倍數。現在hankson 認為自己已經熟練地掌握了這些知識,他開始思考乙個「求公約數」和「求公倍數」之類問題的「逆問題」,這個問題是這樣的:已知正整數a0,a1,b0,b1,設某未知正整數x 滿足:

1. x 和a0 的最大公約數是a1;

2. x 和b0 的最小公倍數是b1。

hankson 的「逆問題」就是求出滿足條件的正整數x。但稍加思索之後,他發現這樣的x 並不唯一,甚至可能不存在。因此他轉而開始考慮如何求解滿足條件的x 的個數。請你幫助他程式設計求解這個問題。

第一行為乙個正整數n,表示有n 組輸入資料。接下來的n 行每行一組輸入資料,為四個正整數a0,a1,b0,b1,每兩個整數之間用乙個空格隔開。輸入資料保證a0 能被a1 整除,b1 能被b0 整除。

【資料範圍】

對於 50%的資料,保證有1≤a0,a1,b0,b1≤10000 且n≤100。

對於 100%的資料,保證有1≤a0,a1,b0,b1≤2,000,000,000 且n≤2000。

每組輸入資料的輸出結果佔一行,為乙個整數。

對於每組資料:若不存在這樣的 x,請輸出0;

【說明】

第一組輸入資料,x 可以是9、18、36、72、144、288,共有6 個。

第二組輸入資料,x 可以是48、1776,共有2 個。

若存在這樣的 x,請輸出滿足條件的x 的個數。

該演算法的難點在於判斷是否為零。

先將b1 質因素分解,         b1=p1^r1*p2^r2......px^rx

將a0 分解為和b1相同形式,a0=p1^l1*p2^l2......px^lx

將a1 分解為和b1相同形式,a1=p1^s1*p2^s2......px^sx

將b0 分解為和b1相同形式,b0=p1^t1*p2^t2......px^tx

假設 答案 y經分解後為,     y=p1^w1*p2^w2......px^wx

由最大公約數的性質可得 a1=p1^min(l1,w1)*p2^min(l2,w2)......*px^min(lx,wx);

由最小公倍數的性質可得 b1=p1^max(t1,w1)*p2^max(t2,w2)......*px^max(tx,wx);

所以 w1,w2,w3.....wx就介於min(lz,wz) max(lz,wz) (z=1,2,3,4....)

然後乘法計數就可以了,判斷0的時候只要判斷是否max(lz,wz)

1 #include2 #include3

using

namespace

std;4//

ifstream fin("cin.in");56

int n,ans=0;7

structa0,a1,b0,b1;

8int l[100],r[100];9

bool p=1;10

11int

main()12

25 x++; 26}

27if(b1.big!=1)

2829

30 a0.tot=0;31

for(int i=1;i<=b1.tot;++i)

3235 a0.tot++;a0.c[a0.tot]=b1.c[i];a0.ci[a0.tot]=len;36}

3738 a1.tot=0;39

for(int i=1;i<=b1.tot;++i)

4043 a1.tot++;a1.c[a1.tot]=b1.c[i];a1.ci[a1.tot]=len;44}

4546 b0.tot=0;47

for(int i=1;i<=b1.tot;++i)

4851 b0.tot++;b0.c[b0.tot]=b1.c[i];b0.ci[b0.tot]=len;52}

5354

for(int i=1;i<=b1.tot;++i)

5557

if(a1.ci[i]b0.ci[i]&&b1.ci[i]>a1.ci[i])

58if(a1.ci[i]continue

;}59

if(b1.ci[i]>b0.ci[i])

60 l[i]=a1.ci[i];r[i]=b1.ci[i];61}

6263 ans=1;64

for(int i=1;i<=b1.tot;++i)

65 ans*=(r[i]-l[i]+1

);66

67if(p==0) ans=0

;68 cout69//

system("pause");70}

7172

return0;

7374 }

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 ...

Luogu P1072 Hankson的趣味題

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