📜  最大化从 1 到 N 的所有可能对的 GCD

📅  最后修改于: 2021-10-26 06:54:53             🧑  作者: Mango

给定一个整数N (? 2),任务是在[1, N]范围内的整数可能的所有对中找到最大的 GCD。

例子:

天真的方法:
解决问题的最简单方法是从[1, N]生成所有可能的对并计算每对的GCD 。最后,打印得到的最大 GCD。
时间复杂度: O(N 2 logN)
辅助空间: O(1)

有效的方法:
请按照以下步骤解决问题:

  • 由于所有对都是不同的,因此,对于任何具有 GCD g 的{a, b}ab 中的任何一个都大于g
  • 考虑到b是更大的数, b ? 2g ,因为2gg大于它的最小倍数。
  • 由于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)).

下面是上述方法的实现:

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 现场工作专业课程学生竞争性编程现场课程