给定一个整数N (? 2),任务是在[1, N]范围内的整数可能的所有对中找到最大的 GCD。
例子:
Input: N = 5
Output: 2
Explanation :
GCD(1, 2) : 1
GCD(1, 3) : 1
GCD(1, 4) : 1
GCD(1, 5) : 1
GCD(2, 3) : 1
GCD(2, 4) : 2
GCD(2, 5) : 1
GCD(3, 4) : 1
GCD(3, 5) : 1
GCD(4, 5) : 1
Input: N = 6
Output: 3
Explanation: GCD of pair (3, 6) is the maximum.
天真的方法:
解决问题的最简单方法是从[1, N]生成所有可能的对并计算每对的GCD 。最后,打印得到的最大 GCD。
时间复杂度: O(N 2 logN)
辅助空间: O(1)
有效的方法:
请按照以下步骤解决问题:
- 由于所有对都是不同的,因此,对于任何具有 GCD g 的对{a, b} , a或b 中的任何一个都大于g 。
- 考虑到b是更大的数, b ? 2g ,因为2g是g大于它的最小倍数。
- 由于b不能超过N ,并且2g ?否。
- 因此, g ?地板(n/2) 。
- Therefore, the maximum GCD that can be obtained is floor(n/2), when pair chosen is (floor(n/2), 2*floor(n/2)).
Illustration:
N = 6
Maximum GCD = 6/2 = 3, occurs for the pair (3, 6)
下面是上述方法的实现:
C++
// C++ Program to implement
// the approach
#include
using namespace std;
// Function to obtain the maximum
// gcd of all pairs from 1 to n
void find(int n)
{
// Print the answer
cout << n / 2 << endl;
}
// Driver code
int main()
{
int n = 5;
// Function call
find(n);
return 0;
}
Java
// Java Program to implement
// the approach
class GFG{
// Function to obtain the maximum
// gcd of all pairs from 1 to n
static void find(int n)
{
// Print the answer
System.out.println(n / 2);
}
// Driver code
public static void main(String[] args)
{
int n = 5;
// Function call
find(n);
}
}
// This code is contributed by Ritik Bansal
Python3
# Python3 program to implement
# the approach
# Function to obtain the maximum
# gcd of all pairs from 1 to n
def find(n):
# Print the answer
print(n // 2)
# Driver Code
if __name__ == '__main__':
# Given n
n = 5
# Function call
find(n)
# This code is contributed by Shivam Singh
C#
// C# Program to implement
// the approach
using System;
class GFG{
// Function to obtain the maximum
// gcd of all pairs from 1 to n
static void find(int n)
{
// Print the answer
Console.Write(n / 2);
}
// Driver code
public static void Main(string[] args)
{
int n = 5;
// Function call
find(n);
}
}
// This code is contributed by rock_cool
Javascript
输出:
2
时间复杂度: O(1)
辅助空间: O(1)
如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性编程现场课程。