uva 11889 GCD
来源:互联网 发布:java 参数 编辑:程序博客网 时间:2024/05/16 07:07
#include <iostream>using namespace std;int gcd(int a, int b){ return b == 0 ? a : gcd(b, a % b);}int main(int argc, char *argv[]){ long long a, L, t, i; cin >> t; while (t--) { cin >> a >> L; if (L % a) cout << "NO SOLUTION" << endl; else { for (i = L / a; i <= L; i += L / a) { if (a / gcd(a, i)*i == L) { cout << i << endl; break;} } if (i > L) cout << "NO SOLUTION" << endl; } } return 0;}
题目:已知两个数的最小公倍数和其中一个数,求另一个数。
分析:数论,构造本题可以才用枚举的方式求解,这里利用数论的方法。
设A = G * A0,B = G * B0,其中GCD(A0,B0)= 1;
如果GCD(C/ A0,A0)= GCD(B0*g,A0)=1,则B = B0可以满足题意;
否则GCD(C/ A0,A0)= GCD(B0*g,A0)= GCD(B0* G0* G',A1 * G0)= G0;
此时取B1= B0·G0,则有LCM(A,B)= A 0* B0* G= A1 * B1*g;
(如果取B = B 0,则LCM(A,B)= A 1* B0* G= A0* B0* G'与假设矛盾)
如果最大公约数(C / A 1,A 1)=最大公约数(A0* B0*g/ A 1,A 1)=最大公约数(G* G'* B0,A1)= 1,则B = B1满足题意;
否则,继续迭代求出B2,A2,直到GCD(C/ AK,AK)= 1;(时间复杂度为(LGN)^2);
说明:本题使用构造方法求解,其正确性在构造结束时即被证明。
0 0
- uva 11889 GCD
- UVA 11889 Benefit——gcd
- UVA 11827 Maximum GCD gcd
- UVa OJ 11417-GCD
- UVa 11417 - GCD
- UVa 11388 - GCD LCM
- UVa 11388 - GCD LCM
- uva 11388 - GCD LCM
- UVA 11388 - GCD LCM
- UVa:11388 GCD LCM
- UVa 11827 Maximum GCD
- UVA 11827-Maximum GCD
- UVA 12716 - GCD XOR
- uva 12716 - GCD XOR
- 【UVA】12716-GCD XOR
- UVA-12716 - GCD XOR
- UVA - 11388 GCD LCM
- UVa 11827 - Maximum GCD
- hdu 2033 人见人爱A+B
- iOS-KVO
- Nginx + IIS + Web前端(Spring MVC)——负载均衡(二)
- Linux 常用命令1——ls
- svn账号用户名密码修改
- uva 11889 GCD
- Android studio 创建 java 应用
- 3696: 化合物|树形DP
- PAT-1024 科学计数法
- 配置CENTOS YUM更新源
- 实现RadioGroup与Fragment的交互
- APP市场推广统计有效推广量新思路
- 遗传算法解决tsp问题
- namenode两次格式化的问题