計蒜客練習題:兩儀劍法
阿新 • • 發佈:2018-11-19
info algo \n bubuko lld cst 使用 tdi -a
lcm和gcd練習題:兩儀劍法
解題:就是求最小公倍數lcm:可以先用__gcd算出最大公約數,根據gcd與lcm的性質公式:gcd * lcm = a * b算出lcm。
註意:數據n和m最大為10億,需使用long long型。
AC代碼:
#include<algorithm> #include<iostream> using namespace std; int gcd(int a,int b){ if(b==0){ return a; } return gcd(b,a%b); } int main(){ int t; long long n,m; cin>>t; while(t--){ cin>>n>>m; cout<<n /gcd(n,m) * m<<endl; } }
方法二:輾轉相減法求最大公約數,再求最小公倍數(時間復雜度更小)
#include<iostream> #include<cstdio> #include<algorithm> using namespace std; //輾轉相減法 求最大公約數 long long int measure(int a,int b) { while(a != b) { if(a>b) { a = a - b; } else { b = b - a; } } return a; } int main () { long long int n; cin>>n; while(n--) { long long int n,m; scanf("%lld %lld",&n,&m); printf("%lld\n",(n*m)/measure(n,m)); } return 0 ; }
計蒜客練習題:兩儀劍法