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

📅  最后修改于: 2021-04-21 23:36:28             🧑  作者: 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 ,因为2g是大于g的g的最小倍数。
  • 由于b不能超过N ,所以2g? N.
  • 因此, g? floor(n / 2)
  • 因此,可以得到的最大GCD是地板(N / 2),当对选定的是(地板(N / 2),2 *地板(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)