Hanks 博士是 BT (Bio-Tech,生物技術(shù)) 領(lǐng)域的知名專家,他的兒子名叫 Hankson。現(xiàn)
在,剛剛放學(xué)回家的 Hankson 正在思考一個(gè)有趣的問(wèn)題。
今天在課堂上,老師講解了如何求兩個(gè)正整數(shù) c1 和 c2 的最大公約數(shù)和最小公倍數(shù)。現(xiàn)
在 Hankson 認(rèn)為自己已經(jīng)熟練地掌握了這些知識(shí),他開(kāi)始思考一個(gè)“求公約數(shù)”和“求公
倍數(shù)”之類(lèi)問(wèn)題的“逆問(wèn)題”,這個(gè)問(wèn)題是這樣的:已知正整數(shù) a0,a1,b0,b1,設(shè)某未知正整
數(shù) x 滿足:
1. x 和 a0 的最大公約數(shù)是 a1;
2. x 和 b0 的最小公倍數(shù)是 b1。
Hankson 的“逆問(wèn)題”就是求出滿足條件的正整數(shù) x。但稍加思索之后,他發(fā)現(xiàn)這樣的
x 并不唯一,甚至可能不存在。因此他轉(zhuǎn)而開(kāi)始考慮如何求解滿足條件的 x 的個(gè)數(shù)。請(qǐng)你幫
助他編程求解這個(gè)問(wèn)題。
第一行為一個(gè)正整數(shù) n,表示有 n 組輸入數(shù)據(jù)。接下來(lái)的 n 行每
行一組輸入數(shù)據(jù),為四個(gè)正整數(shù) a0,a1,b0,b1,每?jī)蓚€(gè)整數(shù)之間用一個(gè)空格隔開(kāi)。輸入
數(shù)據(jù)保證 a0 能被 a1 整除,b1 能被 b0 整除。
輸出文件 son.out 共 n 行。每組輸入數(shù)據(jù)的輸出結(jié)果占一行,為一個(gè)整數(shù)。
對(duì)于每組數(shù)據(jù):若不存在這樣的 x,請(qǐng)輸出 0;
若存在這樣的 x,請(qǐng)輸出滿足條件的 x 的個(gè)數(shù);
輸入樣例#1: 2 41 1 96 288 95 1 37 1776 輸出樣例#1: 6 2
【說(shuō)明】
第一組輸入數(shù)據(jù),x 可以是 9、18、36、72、144、288,共有 6 個(gè)。
第二組輸入數(shù)據(jù),x 可以是 48、1776,共有 2 個(gè)。
【數(shù)據(jù)范圍】
對(duì)于 50%的數(shù)據(jù),保證有 1≤a0,a1,b0,b1≤10000 且 n≤100。
對(duì)于 100%的數(shù)據(jù),保證有 1≤a0,a1,b0,b1≤2,000,000,000 且 n≤2000。
NOip 2009 提高組 第二題
第一次自己證明出數(shù)論類(lèi)問(wèn)題…雞凍>w<,雖然效率爆炸…不過(guò)..不過(guò),就是雞凍辣!!!
【思路】
—————————————我是萌萌的分割線————————————–
#include <cstdio>#include <algorithm>using namespace std;int a0,a1,b0,b1,x,Ans,T;int gcd(int x,int y){while(x^=y^=x^=y%=x);return y;}int main(){ scanf("%d",&T); while( T-- ){ scanf("%d%d%d%d",&a0,&a1,&b0,&b1); Ans=0; for(int i=1;i*i<=b1;i++){ if((b1%i == 0) && (i%a1 == 0) && (gcd((b1/b0),(b1/i)) == 1) && (gcd((a0/a1),(i/a1)) == 1)) Ans++; if((b1/i!=i) && (b1%i==0) && ((b1/i)%a1 == 0) && (gcd((b1/b0),i) == 1) && (gcd((a0/a1),((b1/i)/a1)) == 1)) Ans++; }新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注