📜  找到 GCD 大于 1 的最小和 Pair

📅  最后修改于: 2022-05-13 01:56:06.456000             🧑  作者: Mango

找到 GCD 大于 1 的最小和 Pair

给定两个正整数 A 和 B,任务是找到两个正整数,使它们属于[A, B] 范围,使得它们的 GCD 大于 1,并且它们的和是所有可能对中的最小值。

方法:这个问题可以基于以下观察:

基于上述观察,最好找到值最接近范围下限的两个连续偶数对。请按照以下步骤解决此问题:

  • 检查给定范围abs(A – B)的绝对差
    • 如果abs(A – B) <= 1 ,则不存在任何 gcd 大于 1 的对,打印 -1
  • 如果第一个值是偶数
    • print (A, A+2)因为这些是 GCD 大于 1 的最小数。
  • 如果第一个值是奇数
    • 检查(B – A) == 2然后打印-1因为两个连续奇数的 GCD 总是 1
    • 检查(B – A) > 2那么
      • 如果A可以被 3 整除,则打印(A, A+3)
      • 否则打印(A+1, A +3)

下面是上述方法的实现:

C++
// C++ code to implement the above approach
  
#include 
using namespace std;
  
// Function to find the minimum Sum pair
// such that their GCD(x, y) > 1
void minPair(int A, int B)
{
    // If absoulute difference is 1
    // then no such pair exists
    if (abs(B - A) <= 1)
        cout << "-1";
    else {
        // Check if first number is even
        if ((A % 2) == 0)
            cout << A << " " << A + 2;
        else {
            if (B - A == 2) {
                cout << -1;
            }
            else {
  
                // Check if first number is
                // divisible by 3
                if (A % 3 == 0) {
                    cout << A << " " << A + 3;
                }
                else {
                    cout << A + 1 << " "
                         << A + 3;
                }
            }
        }
    }
}
  
// Drive code
int main()
{
    int A = 2;
    int B = 10;
  
    // Function call
    minPair(A, B);
    return 0;
}


输出
2 4

时间复杂度: O(1)
辅助空间: O(1)