POJ NOI MATH-7828 最大公约数与最小公倍数
生活随笔
收集整理的這篇文章主要介紹了
POJ NOI MATH-7828 最大公约数与最小公倍数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
問題鏈接:POJ NOI MATH-7828 最大公約數與最小公倍數。
總時間限制:1000ms 內存限制: 65536kB 描述 輸入兩個不大于10000的正整數G和L,中間用單個空格隔開。數據保證L是G的倍數。 輸出一個正整數,即最小的和。 樣例輸入 14 280 樣例輸出 126 來源《奧數典型題舉一反三(小學五年級)》 (ISBN 978-7-5445-2882-5) 模擬試卷一 第6題
總時間限制:
兩個正整數的最大公約數是G,最小公倍數是L,它們的和最小是多少?
問題分析
? 不知道如何下手就枚舉,靠暴力解決問題。問題是如何枚舉?
? 假設兩個正整數是a和b,那么a>0且b>0。G是a和b的最大公約數,假設a=kaG和b=kbG, a+b=(ka+kb)G,明顯ka>0且kb>0,得ka+kb>=2。
? 那么,枚舉就按照ka+kb>=2,枚舉ka+kb,從2開始。并且滿足a+b=(ka+kb)G。
程序說明
? 程序中,變量i即ka+kb,變量aplusb即a+b,變量j即a,aplusb-j即b。
AC的C++語言程序:
#include <iostream>using namespace std;// 非遞歸計算最大公約數 int gcd(int m, int n) {for(;;) {if(n == 0)return m;int temp = m % n;m = n;n = temp;} }int main() {int g, l, ans, aplusb;cin >> g >> l;for(int i=2; ;i++) {ans = 0;aplusb = i * g;for(int j=g; j<aplusb; j+=g)if(j / g * (aplusb - j) == l) {if(gcd(j, aplusb - j) == g) {ans = aplusb;break;}}if(ans > 0) {cout << ans << endl;break;}}return 0; }
轉載于:https://www.cnblogs.com/tigerisland/p/7563943.html
總結
以上是生活随笔為你收集整理的POJ NOI MATH-7828 最大公约数与最小公倍数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [LeetCode]Merge Inte
- 下一篇: RDC如何打造支撑百万用户的分布式代码托