uva 11889 GCD
2016-02-28 17:02
260 查看
#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);
说明:本题使用构造方法求解,其正确性在构造结束时即被证明。
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);
说明:本题使用构造方法求解,其正确性在构造结束时即被证明。
相关文章推荐
- 2015.09-2016.02 半年总结 项目多也别傻做
- poj2151概率dp
- 详解高速神器python脚步打包android apk,超级快!!(打包系列教程之六)
- 8. String to Integer (atoi)
- UICollectionView 简单实用
- Pandas分组统计函数:groupby、pivot_table及crosstab
- java反射学习笔记之 动态加载类
- HDOJ 1033 Edge
- 334. Increasing Triplet Subsequence
- Django架设blog步骤(转)
- C++有符号和无符号数的转换
- JDK新特性
- Powerful Calculator(上海交大上机考试)
- HTTP协议
- Redis-发布与订阅
- Linux精讲——增加和删除用户
- 求k分位数的k-1个顺序统计量
- 使用Python做科学计算初探(转)
- 动态更换view类的背景----StateListDrawable的应用
- ios 第三方qq授权登陆,第一次登陆后,再次登陆,失效