互质数或互质数对是那些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