CodeVS1012 最大公約數和最小公倍數問題

2021-09-26 05:10:08 字數 1078 閱讀 9057

題目:

題目描述 description

輸入二個正整數x0,y0(2<=x0<100000,2<=y0<=1000000),求出滿足下列條件的p,q的個數

條件: 1.p,q是正整數

2.要求p,q以x0為最大公約數,以y0為最小公倍數.

試求:滿足條件的所有可能的兩個正整數的個數.

輸入描述 input description

二個正整數x0,y0

輸出描述 output description

滿足條件的所有可能的兩個正整數的個數

樣例輸入 sample input

3 60

樣例輸出 sample output

4解題思路:

首先讓最小公倍數 / 最小公約數,設其值為x, 則問題就轉化為x 可以被轉化為多少個不同組合的數,那麼我們只要求出x有多少個質數組成,設有cnt個質數,那麼答案就為 1 << (cnt);

特殊的情況:

1.cnt == 0; 表示最大公約數和最小公倍數相等了,這時就只有一種組合;

2.在最開始還需要判斷 最小公倍數是否能夠整除最大公約數,如果不能就直接輸出0。否則再執行上面的操作。

ac**:

#include #include using namespace std;

const int maxn = 1e4;

int x0, y0;

int prime[maxn], cnt;

int sum[maxn];

int main(void)

}} if(y0 > 1) prime[++ cnt] = y0, sum[cnt] ++;

if(cnt == 0) puts("1");

else printf("%d\n", 1 << cnt); }

return 0;

}

總結:

這道題我wa了4次;

這4次的原因只有乙個:y0 % x0 != 0 這種情況沒有想到,或者沒有考慮完整。

所以每次做題後一定要仔細地想一想極限的情況,考慮有沒有可能答案不存在,答案會不會超範圍。這點也很重要。

最大公約數

1.執行最大公約數的常用演算法,並新增異常處理模組 如輸入非法等 在基礎程式的基礎上,可以考慮手動輸入所有數字或者利用隨機數產生數字,分別加入異常處理模組。注 隨機數的產生方法 srand 的作用是提供乙個種子。然後呼叫rand 其格式為int rand void 它會根據提供給srand 的種子值...

最大公約數

最大公因數 greatest common divisor 也稱最大公約數 最大公因子,指兩個或多個整數共有約數中最大的乙個。a,b的最大公約數記為 a,b 同樣的,a,b,c的最大公約數記為 a,b,c 多個整數的最大公約數也有同樣的記號。求最大公約數有多種方法,常見的有質因數分解法 短除法 輾轉...

最大公約數

求兩數的最大公約數 簡單嗎?簡單!用多種方法求,可以嗎?emmmmm.應該可以吧?相信絕大多數人都知道求最大公約數的如下 所示的這種方法 include includeint commondivisor int x,int y min return min int main 先判斷兩個數的大小,將較...