📜  给定总和最小差的互质对

📅  最后修改于: 2021-04-24 19:49:35             🧑  作者: Mango

互质数或互质数对是那些GCD为1的数字对。给定数字n表示该数字是互质数对(A,B)的总和,使得A – B最小。

例子 :

Input : 12 
Output : 5 7
Possible co-prime pairs are (5, 7), (1, 11)
but difference between 5 and 7 is minimum

Input : 13
Output : 6 7
Possible co-prime pairs are (6, 7), (5, 8),
(4, 9), (3, 10), (2, 11) and (1, 12) 
but difference between 6 and 7  is minimum

一个简单的解决方案是遍历从1到n-1的所有数字。对于每个数字x,请检查n – x和x是否为互质数。如果是,则更新这两个结果之间的差值,直到两者之间的差值小于最小差值为止。

一个有效的解决方案基于以下事实:具有最小差异的数字应接近n / 2。我们从n / 2循环到1。检查每个可能的对,并在找到第一个可能的互质对时显示它并停止循环。

C++
// CPP program to represent a number  
// as sum of a co-prime pair such that 
// difference between them is minimum
#include 
using namespace std;
  
// function to check if pair
// is co-prime or not
bool coprime(int a, int b)
{
    return (__gcd(a, b) == 1);
}
  
// function to find and print 
// co-prime pair
void pairSum(int n){
      
    int mid = n / 2;
  
    for (int i = mid; i >= 1; i--) {
        if (coprime(i, n - i) == 1) {
            cout << i << " " << n - i;
            break;
        }
    }
}
  
// driver code
int main()
{
    int n = 11;
    pairSum(n);
    return 0;
}


Java
// Java program to represent a 
// number as sum of a co-prime 
// pair such that difference 
// between them is minimum
class GFG 
{
    static int __gcd(int a, int b)
    {
        return b == 0 ? a : 
           __gcd(b, a % b);
    }
      
    // function to check if pair
    // is co-prime or not
    static boolean coprime(int a, int b)
    {
        return (__gcd(a, b) == 1);
    }
      
    // function to find and 
    // print co-prime pair
    static void pairSum(int n)
    {
        int mid = n / 2;
      
        for (int i = mid; i >= 1; i--)
        {
            if (coprime(i, n - i) == true)
            {
                System.out.print( i + " " + 
                                  (n - i));
                break;
            }
        }
    }
      
    // Driver Code
    public static void main(String args[]) 
    {
        int n = 11;
        pairSum(n);
          
    }
}
  
// This code is contributed by Sam007


Python3
# Python3 program to represent 
# a number as sum of a co-prime 
# pair such that difference 
# between them is minimum
import math
  
# function to check if pair
# is co-prime or not
def coprime(a, b):
    return 1 if(math.gcd(a, b) == 1) else 0;
  
# function to 
# find and print 
# co-prime pair
def pairSum(n):
    mid = int(n / 2);
    i = mid;
    while(i >= 1):
        if (coprime(i, n - i) == 1):
            print(i, n - i);
            break;
        i = i - 1;
  
# Driver code
n = 11;
pairSum(n);
  
# This code is contributed
# by mits


C#
// C# program to represent a number 
// as sum of a co-prime pair such that 
// difference between them is minimum
using System;
  
class GFG {
  
    static int __gcd(int a, int b)
    {
        return b == 0 ? a : __gcd(b, a % b);
    }
      
    // function to check if pair
    // is co-prime or not
    static bool coprime(int a, int b)
    {
        return (__gcd(a, b) == 1);
    }
      
    // function to find and print 
    // co-prime pair
    static void pairSum(int n)
    {
        int mid = n / 2;
      
        for (int i = mid; i >= 1; i--)
        {
            if (coprime(i, n - i) == true)
            {
                Console.Write( i + " " 
                               + (n - i));
                break;
            }
        }
    }
      
    // Driver code
    public static void Main()
    {
        int n = 11;
        pairSum(n);
    }
}
  
// This code is contributed by Sam007


PHP
= 1; $i--) 
    {
        if (coprime($i, $n - $i) == 1)
        {
            echo $i . " " . ($n - $i);
            break;
        }
    }
}
  
// Driver code
$n = 11;
pairSum($n);
  
// This code is contributed
// by mits
?>


输出 :

5 6