题目链接:http://poj.org/problem?id=2429
题意
给出两个数的最大公因数和最小公倍数(数据范围2^64),求这两个数(存在多组数时输出和最小的一组数)
题解
我们很容易得到以下方程: (a/gcd)*(b/gcd)=(lcm/gcd)。因为(a/gcd)和(b/gcd)一定是互质的(如果不互质,gcd就要改变),这样我们就可以看成是将(lcm/gcd)分解成互质的两个数。
使用Pollard-Rho算法算出大整数的素因子表,为了保证分解成的两个数是互质的,将素质因子表中相同的数进行相乘,可以证明这样得到的数组内的元素之间还是互质的。
最后只需要对表中的元素分成两组就行了,用一个简单的DFS就可以搞定。
代码(处于Runtime error )
1 |
|