Two Divisors

75 阅读3分钟

前言

对这个题,我看题解,非常简单,但是不知道为什么。通过与老师讨论后解决疑惑,并给出了严谨的数学证明,在下面我逐一给出。

本题是CF Good Bye Problem - B - Codeforces

problem B

A certain number 1x1091 \leq x \leq 10 ^ 9 is chosen. You are given two integers aa and bb, which are the two largest divisors of the number xx. At the same time, the condition 1a<b<x 1 \leq a < b < x is satisfied.

For the given numbers 𝑎, b𝑎, b, you need to find the value of xx.

†††† The number yy is a divisor of the number xx if there is an integer kk such that .

Input

Each test consists of several test cases. The first line contains a single integer t (1t104)(1\leq t \leq 10^4) — the number of test cases. Then follows the description of the test cases.

The only line of each test cases contains two integers a , b (1a,b109)(1 \leq a , b \leq 10 ^ 9).

It is guaranteed that a, ba, b are the two largest divisors for some number 1x1091 \leq x \leq 10 ^ 9.

Output

For each test case, output the number xx, such that a𝑎 and b𝑏 are the two largest divisors of the number xx.

If there are several answers, print any of them.

解法:

  • 对于 b mod a=0b \ mod \ a = 0
    • b=apb = a * p , 其中 pp 是x的最小质因数 , 所以 x=bpx = b * p
  • 对于b mod a !=0b \ mod \ a \ != 0
    • x=bp,x=aqx = b * p , x = a * q , 其中p 最小的质因子 , q 是次最小的质因子 , x=bp=bagcd(a,b)x = b * p = b * \frac{a}{gcd(a , b)}

接下来,我们将从两种情况分别证明:

  • 首先来讨论第一种情况 bb % a = 0 (下文 mod 使用 % 代替)
    • 先来说明 , b = a * p , 其中 ,p 一定是质数。
      • 证明:
        考虑反证法:假设 a , b 满足 1a<b<x1 \leq a < b < x , b 是 x 最大的因子 , b 是x次大的因子 , 且 b%a=0 b \% a = 0 , 那么 b=apb = a * p 一定满足 , 且 p 一定不是质数。
        如果结论成立 , p 一定是由至少两个质数的乘积组成的(唯一分解定理) , 那么我们还可以找到 , 比a大且比b小的因子 , 与前提矛盾,所以结论错误。

      • 结论: 假设 a , b 满足 1a<b<x1 \leq a < b < x , b 是 x 最大的因子 , a 是x次大的因子 , 且b%a=0b \% a = 0(即第一种情况), 那么 b=apb = a * p 一定满足 , 且 p 一定是质数

    • 为什么p 一定是最小的质因数 ?
      • 先给出一个性质: 假设满足第一种情况 , 则 x=p1k1p2k2pklkx = {p_1}^{k_1} * {p_2} ^ {k_2} ····{p_k}^{l_k} , 总有k12k_1 \geq 2 成立。

        • 证明:考虑反证法
          • 假设第一种情况成立 , 我们有b=apb = a * p , p 是质数 , 总有k1<2k_1 < 2。 按照假设的结论 ,将a , b 全部写出 , 即 , b=p2k2pklk,a=p1l1p2l21pklkb = {p_2} ^ {k_2} ····· {p_k}^{l_k} , a = {p_1}^{l_1} * {p_2} ^ {l_2 - 1}·····{p_k} ^ {l_k} , b将最小的质因子丢掉p1p_1 , a 将p2p_2丢掉一个次方。那么 b%a!=0b \% a != 0 , 与前提矛盾 ,假设不成立。
      • 结论: 假设满足第一种情况, 则 x=p1k1p2k2pklk,k12x = {p_1}^{k_1} * {p_2} ^ {k_2} ····{p_k}^{l_k} , k_1 \geq 2

      • 通过这个结论我们知道,如果我们将 x 写成 p1l1p2l2pklk{p_1} ^ {l_1} * {p_2} ^ {l_2} ····{p_k} ^ {l_k} , k2k \geq 2 , 我们可以知道b 一定是去掉 一个 p1p_1 , a 去掉 p12{p_1}^2 , (这里的去掉 即 /), 这样结论就很显然

    • 结论:p 一定是最小的质因数.

我们上述结论的话 , 那么 x=bp=bbax = b * p = b * \frac{b}{a}成立。

  • 讨论第二种情况 b%a!=0b \% a != 0
    • 我们可以得到一些信息 , x 如果分解成 p11pklk,l1=1{p_1} ^ {1} ···· {p_k}^{l_k} , l_1 = 1 , b 一定是去掉了p1p_1 , a 是去掉了p2p_2 , 这样满足前提条件。

    • 证明:

      • 如果1a<b<x1 \leq a < b < x , 但是 b%a!=0b \% a != 0 , b , a 又是最大、次大的因子。 x=p1l1pklkx = {p_1} ^ {l_1} ···· {p_k}^{l_k} , 那么我们必然是去掉 p1p_1 , 为什么 l1l_1 一定是 1? 因为如果大于等于 2 , 那么一定 b%a=0b \% a = 0 , 建议认真思考一下 ,也可以参考第一种情况。 如果要符合条件的话 , b 只能拿掉 p1p_1 , a 只能拿掉 p2p_2 , 所以我们知道了 b , a 的表示。
    • gcd(a,b)=p2l21pklkgcd(a , b) = {p_2}^{l_2 - 1}····{p_k}^{l_k} , 那么我们通过 agcd(a,b)\frac{a}{gcd(a , b)} 就可以算出 p1p_1(读者可以将a,以及gcd(a , b)的表达形式写出来) 那么我们求出来最小质因子p1p_1 , 那么 我们可以求出 x=bagcd(a,b)x = b * \frac{a}{gcd(a , b)} (其中的p1p_1 即是 p , q 即是q2q_2)。

  • 证毕

总结

这份证明,我思考了很久,终于在某天搞懂了,特此来记下。写的有不足的地方,如果您有好的建议,欢迎您指出。

致谢

本文内容,受到湖南信息学院通识教育学院周斌彬老师指导与启发,特此感谢