我们需要对数字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