Finding LCM LightOJ - 1215

傳送門

題意:

給出a,b,L求lcm(a,b,c)=L

首先我們可以算出ab的lcm爲k,然後令L/k=r,從r開始枚舉c

那麼kc/gcd(k,c)=Lk*c/gcd(k,c)=L,當gcd(k,c)等於1時即找到c的最小值

AC代碼:

#include<bits/stdc++.h>
using namespace std;
int main() {
	int t;
	cin>>t;
	int k=1;
	while(t--) {
		long long a,b,c,L;
		cin>>a>>b>>L;
		printf("Case %d: ",k++);
		c=a*b/(__gcd(a,b));
		if(L%c)	cout<<"impossible\n";
		else {
			long long d=L/c;
			while(__gcd(d,c)!=1) {
				long long m=__gcd(c,d);
				c/=m;
				d*=m;
			}
			cout<<d<<endl;
		}
	}
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章