Zerojudge 基礎題庫a024 最大公因數(GCD)
前幾次的AC對我來講是極大的鼓勵,這次來解一點數學吧~
今天要來解最大公因數
先來想想平常最大公因數是怎麼解的
求(12,15)
我們會先找質數來除除看
如2,3,5
看看可不可以把他們兩個給整除
一直測試到兩數最小數時(12)
來想流程吧:
//準備
輸入兩數m,n
m,n找出最小值設為s
//開始
從2開始測試資料,測到s
if 2整除m 且2整除n
m = m/2
n = n/2
ans = ans * 2
重複再一遍
else 換成三來測試
轉成程式碼:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | #include <iostream> using namespace std; int main() { int m,n; int s; int ans = 1; //輸入兩數m,n while(cin >> m >> n){ //m,n找出最小值設為s if (m > n) { s = n; } else { s = m; } //從2開始測試資料,測到s for (int i = 2;i <= s; i++) { while (1) { if (m % i !=0 || n % i != 0) { break; } m = m/i; n = n/i; ans = ans * i; } } cout << ans << endl; ans = 1; //記得每計算一次後要回復原狀 } } |
這題不是很難,我20分鐘解決了。
送進Zerojudge試試...
#0: 100% AC (2ms, 332KB)
通過檢測
留言
張貼留言