CODEVS 1172 Hankson 的趣味题
題目描述 Description
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 的個數。請你幫
助他編程求解這個問題。
輸入描述 Input Description
第一行為一個正整數n,表示有n 組輸入數據。接下來的n 行每
行一組輸入數據,為四個正整數a0,a1,b0,b1,每兩個整數之間用一個空格隔開。輸入
數據保證a0 能被a1 整除,b1 能被b0 整除。
輸出描述 Output Description
每組輸入數據的輸出結果占一行,為一個整數。
對于每組數據:若不存在這樣的 x,請輸出0;
若存在這樣的 x,請輸出滿足條件的x 的個數;
樣例輸入 Sample Input
2
41 1 96 288
95 1 37 1776
樣例輸出 Sample Output
6
2
數據范圍及提示 Data Size & Hint
【說明】
第一組輸入數據,x 可以是9、18、36、72、144、288,共有6 個。
第二組輸入數據,x 可以是48、1776,共有2 個。
【數據范圍】
對于 50%的數據,保證有1≤a0,a1,b0,b1≤10000 且n≤100。
對于 100%的數據,保證有1≤a0,a1,b0,b1≤2,000,000,000 且n≤2000。
.
.
.
.
.
程序:
#include<iostream> using namespace std;int gcd(int a,int b) {if (b==0) return a; else return gcd(b,a%b); }int main() {int t;cin>>t;for (int w=1;w<=t;w++){int a0,a1,b0,b1;cin>>a0>>a1>>b0>>b1;int p=a0/a1,q=b1/b0,ans=0;for (int x=1;x*x<=b1;x++)if (b1%x==0){if (x%a1==0&&gcd(x/a1,p)==1&&gcd(q,b1/x)==1) ans++;int y=b1/x;if (x==y) continue;if (y%a1==0&&gcd(y/a1,p)==1&&gcd(q,b1/y)==1) ans++;}cout<<ans<<endl;} }轉載于:https://www.cnblogs.com/YYC-0304/p/10292854.html
總結
以上是生活随笔為你收集整理的CODEVS 1172 Hankson 的趣味题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 洛谷 P2261 [CQOI2007]余
- 下一篇: 洛谷 P2935 [USACO09JAN