给定整数N ,任务是对数字进行分组,以使每个组互质互素,而总分组最小。
例子:
Input: N = 8
Output:
1 2 3
4 5
6 7
8
Input: N = 5
Output:
1 2 3
4 5
方法:在这个问题上的关键观察是两个连续的数字总是互质的。那就是GCD(a,a + 1)=1。另一个重要的观察结果是在一组中不能列出偶数。因为它们将导致2的最大公约数。因此,每个连续的偶数和奇数可以分组为一组,而1可以在任何组中,因为1的最大公约数始终为1。
下面是上述方法的实现:
C++
// C++ implementation to group
// mutually coprime numbers into
// one group with minimum group possible
#include
using namespace std;
// Function to group the mutually
// co-prime numbers into one group
void mutually_coprime(int n)
{
if (n <= 3)
{
// Loop for the numbers less
// than the 4
for(int j = 1; j <= n; j++)
{
cout << j << " ";
}
cout << "\n";
}
else
{
// Integers 1, 2 and 3 can be
// grouped into one group
cout << "1 2 3\n";
for(int j = 4; j < n; j += 2)
{
// Consecutive even and
// odd numbers
cout << j << " " << j + 1 << "\n";
}
if(n % 2 == 0)
cout << n << "\n";
}
}
// Driver Code
int main()
{
int n = 9;
// Function call
mutually_coprime(n);
}
// This code is contributed by yatinagg
Java
// Java implementation to group
// mutually coprime numbers into
// one group with minimum group possible
class GFG{
// Function to group the mutually
// co-prime numbers into one group
static void mutually_coprime(int n)
{
if (n <= 3)
{
// Loop for the numbers less
// than the 4
for(int j = 1; j < n + 1; j++)
System.out.print(j + " ");
System.out.println();
}
else
{
// Integers 1, 2 and 3 can be
// grouped into one group
System.out.println("1 2 3");
for(int j = 4; j < n; j += 2)
{
// Consecutive even and
// odd numbers
System.out.println(j + " " + (j + 1));
if (n % 2 == 0)
System.out.println(n);
}
}
}
// Driver Code
public static void main(String[] args)
{
int n = 9;
// Function Call
mutually_coprime(n);
}
}
// This code is contributed by sapnasingh4991
Python3
# Python3 implementation to group
# mutually coprime numbers into
# one group with minimum group possible
# Function to group the mutually
# co-prime numbers into one group
def mutually_coprime (n):
if ( n <= 3):
# Loop for the numbers less
# than the 4
for j in range (1, n + 1):
print (j, end =" ")
print ()
else:
# Integers 1, 2 and 3 can be
# grouped into one group
print (1, 2, 3)
for j in range ( 4, n, 2 ):
# Consecutive even and
# odd numbers
print (j, ( j + 1 ))
if(n % 2 == 0):
print (n)
# Driver Code
if __name__ == "__main__":
n = 9
# Function Call
mutually_coprime (n)
C#
// C# implementation to group
// mutually coprime numbers into
// one group with minimum group possible
using System;
class GFG{
// Function to group the mutually
// co-prime numbers into one group
static void mutually_coprime(int n)
{
if (n <= 3)
{
// Loop for the numbers less
// than the 4
for(int j = 1; j < n + 1; j++)
Console.Write(j + " ");
Console.WriteLine();
}
else
{
// ints 1, 2 and 3 can be
// grouped into one group
Console.WriteLine("1 2 3");
for(int j = 4; j < n; j += 2)
{
// Consecutive even and
// odd numbers
Console.WriteLine(j + " " + (j + 1));
if (n % 2 == 0)
Console.WriteLine(n);
}
}
}
// Driver Code
public static void Main(String[] args)
{
int n = 9;
// Function Call
mutually_coprime(n);
}
}
// This code is contributed by sapnasingh4991
输出:
1 2 3
4 5
6 7
8 9