輾轉相減,求最後的a b
阿新 • • 發佈:2018-03-10
log 來源 med targe 公式 求解 title head target
來源:codeforces B. Weird Subtraction Process
You have two variables a and b. Consider the following sequence of actions performed with these variables:
- If a?=?0 or b?=?0, end the process. Otherwise, go to step 2;
- If a?≥?2·b, then set the value of a to a?-?2·b, and repeat step 1. Otherwise, go to step 3;
- If b?≥?2·a, then set the value of b to b?-?2·a, and repeat step 1. Otherwise, end the process.
Initially the values of a and b are positive integers, and so the process will be finite.
You have to determine the values of a and b after the process ends.
InputThe only line of the input contains two integers n and m (1?≤?n,?m?≤?1018). n is the initial value of variable a, and m is the initial value of variable b.
Print two integers — the values of a and b after the end of the process.
Examples input Copy12 5output
0 1input Copy
31 12output
7 12
思路:
模擬題目給出的步驟,逐步求解,超時,後來想到預處理ab,預處理不徹底,被hack
總結:
不能魯莽的模擬,一定要考慮到特殊情況,千萬不能因為簡單而大意。這種題目應該分析出公式
#include <bits/stdc++.h> using namespace std; long long a,b; int main() { cin>>a>>b; while(a!=0&&b!=0) if(a>=2*b) { a%=(2*b); } else if(b>=2*a) { b%=(2*a); } else break; cout<<a<<" "<<b<<endl; return 0; }
輾轉相減,求最後的a b