📜  打破一个数字,使所有部分的最大除数之和最小

📅  最后修改于: 2021-04-27 19:30:51             🧑  作者: Mango

我们需要对数字n进行分割,以使所有部分的最大除数之和最小。

例子 :

Input:  n = 27
Output: Minimum sum of maximum
        divisors of parts = 3
Explanation : We can split 27 as 
follows: 27 =  13 + 11 + 3,
Maximum divisor of 13 = 1,
                   11 = 1,
                   3 = 1.
Answer = 3 (1 + 1 + 1).

Input : n = 4
Output: Minimum sum of maximum
        divisors of parts = 2
Explanation : We can write 4 = 2 + 2
Maximum divisor of 2 = 1,
So answer is 1 + 1 = 2.

我们需要最小化最大除数。显然,如果N为质数,则最大除数=1。如果数字不是质数,则该数字应至少为2。
根据哥德巴赫猜想,每个偶数整数都可以表示为两个质数之和。对于我们的问题,将有两种情况:
1)当偶数为偶数时,可以表示为两个质数之和,由于质数的最大除数为1,因此我们的答案为2。
2)当数字为奇数时,也可以写为质数之和, n = 2 +(n-2);如果(n-2)是质数(答案= 2),否则。有关详细信息,请参考奇数作为素数之和。
n = 3 +(n-3); (n-3)是一个偶数,它是两个质数之和(答案= 3)。
以下是此方法的实现。

C++
// CPP program to break a number such
// that sum of maximum divisors of all
// parts is minimum
#include 
using namespace std;
  
// Function to check if a number is
// prime or not.
bool isPrime(int n)
{
    int i = 2;
    while (i * i <= n) {
        if (n % i == 0)
            return false;
        i++;
    }
    return true;
}
  
int minimumSum(int n)
{
    if (isPrime(n))
        return 1;
  
    // If n is an even number (we can
    // write it as sum of two primes)
    if (n % 2 == 0)
        return 2;
  
    // If n is odd and n-2 is prime.
    if (isPrime(n - 2))
        return 2;
  
    // If n is odd, n-3 must be even.
    return 3;
}
  
// Driver code
int main()
{
    int n = 27;
    cout << minimumSum(n);
    return 0;
}


Java
// JAVA Code for Break a number such that sum
// of maximum divisors of all parts is minimum
import java.util.*;
  
class GFG {
  
    // Function to check if a number is
    // prime or not.
    static boolean isPrime(int n)
    {
        int i = 2;
  
        while (i * i <= n) {
            if (n % i == 0)
                return false;
            i++;
        }
        return true;
    }
  
    static int minimumSum(int n)
    {
        if (isPrime(n))
            return 1;
  
        // If n is an even number (we can
        // write it as sum of two primes)
        if (n % 2 == 0)
            return 2;
  
        // If n is odd and n-2 is prime.
        if (isPrime(n - 2))
            return 2;
  
        // If n is odd, n-3 must be even.
        return 3;
    }
  
    /* Driver program to test above function */
    public static void main(String[] args)
    {
        int n = 4;
        System.out.println(minimumSum(n));
    }
}
  
// This code is contributed by Arnav Kr. Mandal.


Python3
# Python3 program to break a number 
# such that sum of maximum divisors 
# of all parts is minimum
  
# Function to check if a number is 
# prime or not.
def isPrime( n):
    i = 2
      
    while (i * i <= n):
          
        if (n % i == 0):
            return False
        i+= 1
  
    return True
      
def minimumSum( n):
      
    if (isPrime(n)):
        return 1
      
    # If n is an even number (we can
    # write it as sum of two primes)
    if (n % 2 == 0):
        return 2
      
    # If n is odd and n-2 is prime.
    if (isPrime(n - 2)):
        return 2
          
    # If n is odd, n-3 must be even.
    return 3
  
# Driver code
n = 27
print(minimumSum(n))
  
# This code is contributed by "Abhishek Sharma 44"


C#
// C# Code for Break a number
// such that sum of maximum
// divisors of all parts is minimum
using System;
  
class GFG {
  
    // Function to check if a number is
    // prime or not.
    static bool isPrime(int n)
    {
        int i = 2;
  
        while (i * i <= n) {
            if (n % i == 0)
                return false;
            i++;
        }
        return true;
    }
  
    static int minimumSum(int n)
    {
        if (isPrime(n))
            return 1;
  
        // If n is an even number (we can
        // write it as sum of two primes)
        if (n % 2 == 0)
            return 2;
  
        // If n is odd and n-2 is prime.
        if (isPrime(n - 2))
            return 2;
  
        // If n is odd, n-3 must be even.
        return 3;
    }
  
    // Driver program
    public static void Main()
    {
        int n = 27;
        Console.WriteLine(minimumSum(n));
    }
}
  
// This code is contributed by vt_m.


PHP


输出 :

3