Uva 11889 Benefit (lcm与gcd)
2016-12-04 10:41
316 查看
题意:给你两个数,a,c,求出 lcm(a,b)==c 时的 b 的最小值
思路:我们知道一个性质 gcd(a,b)*lcm(a,b) = a*b
由此我们可以得到 b = gcd(a,b)*lcm(a,b)/a
那我们可以先用 lcm(a,b)/a 计算出假定的b值
如果 gcd(a.b)==1 那么b的最小值确定
如果 gcd(a,b)!=1 我们就要通过计算来找到
计算方法为 a=a/gcd(a,b) b=b*gcd(a.b)
样例:
4
6 12
2 6
32 1760
7 16
结果: 4 3 55 NO SOLUTION
思路:我们知道一个性质 gcd(a,b)*lcm(a,b) = a*b
由此我们可以得到 b = gcd(a,b)*lcm(a,b)/a
那我们可以先用 lcm(a,b)/a 计算出假定的b值
如果 gcd(a.b)==1 那么b的最小值确定
如果 gcd(a,b)!=1 我们就要通过计算来找到
计算方法为 a=a/gcd(a,b) b=b*gcd(a.b)
样例:
4
6 12
2 6
32 1760
7 16
结果: 4 3 55 NO SOLUTION
#include <iostream> #define ll long long using namespace std; int gcd(int a,int b) { if(b==0) return a; else return gcd(b,a%b); } int main() { int t; cin>>t; while(t--) { int a,c; cin>>a>>c; if(c%a!=0) { cout<<"NO SOLUTION"<<endl; continue; } int ans=c/a; int k=gcd(a,ans); while(k!=1) { a=a/k; ans=ans*k; k=gcd(a,ans); } cout<<ans<<endl; } return 0; }
相关文章推荐
- [UVa 11889] Benefit (基础数论+GCD+LCM)
- UVa 11889 (GCD) Benefit
- uva11889(GCD,LCM)
- UVA 11889 Benefit——gcd
- UVA11889:Benefit(已知LCM和其中一个数,求另一个数)
- uva11889 Benefit(gcd)
- UVA - 11889 Benefit【LCM】
- UVA 11889-Benefit(数学_快速枚举因子)
- uva 11388 - GCD LCM(数论)
- UVa 11388 GCD LCM (暴力)
- UVA 11889 - Benefit 可直接枚举
- uva 11388 - GCD LCM
- uva 11889 - Benefit(数论)
- UVA 11889 Benefit
- UVa 11889 - Benefit
- UVA 11388 - GCD LCM 水~
- uva 10791 (gcd,lcm,最小和表示法,单个质因子总和得凑起来)
- uva 11889 - Benefit
- UVa 11889 Benefit (数论)
- UVa 10892 LCM的个数 (GCD和LCM 质因数分解)