本文概述
- C ++
- Java
- Python3
- C#
- PHP
- C ++
- Java
- Python3
- C#
- PHP
例子 :
Input : arr[] = { 2, 4, 6, 8, 12 }
Output : 5Input : arr[] = { 3, 5, 7 }
Output : 0
简单的方法:解决此问题的最简单方法是首先找到数组元素的总和。然后检查此和是否为素数, 如果和为素数则返回零, 否则找到比该和大的素数。通过从(sum + 1)直到找到素数, 检查一个数字是否为素数, 我们可以找到大于素数的总和。一旦找到刚好大于和的质数, 则返回和与该质数的差。
下面是上述想法的实现:
C ++
//C++ program to find minimum number to
//insert in array so their sum is prime
#include <
bits/stdc++.h>
using namespace std;
//function to check if a
//number is prime or not
bool isPrime( int n)
{
//Corner case
if (n <
= 1)
return false ;
//Check from 2 to n - 1
for ( int i = 2;
i <
n;
i++)
if (n % i == 0)
return false ;
return true ;
}//Find prime number
//greater than a number
int findPrime( int n)
{
int num = n + 1;
//find prime greater than n
while (num)
{
//check if num is prime
if (isPrime(num))
return num;
//increment num
num = num + 1;
}return 0;
}//To find number to be added
//so sum of array is prime
int minNumber( int arr[], int n)
{
int sum = 0;
//To find sum of array elements
for ( int i = 0;
i <
n;
i++)
sum += arr[i];
//if sum is already prime
//return 0
if (isPrime(sum))
return 0;
//To find prime number
//greater than sum
int num = findPrime(sum);
//Return difference of
//sum and num
return num - sum;
}//Driver code
int main()
{
int arr[] = { 2, 4, 6, 8, 12 };
int n = sizeof (arr) /sizeof (arr[0]);
cout <
<
minNumber(arr, n);
return 0;
}
Java
//Java program to find minimum number to
//insert in array so their sum is primeclass GFG
{
//function to check if a
//number is prime or not
static boolean isPrime( int n)
{
//Corner case
if (n <
= 1 )
return false ;
//Check from 2 to n - 1
for ( int i = 2 ;
i <
n;
i++)
if (n % i == 0 )
return false ;
return true ;
}//Find prime number
//greater than a number
static int findPrime( int n)
{
int num = n + 1 ;
//find prime greater than n
while (num>
0 )
{//check if num is prime
if (isPrime(num))
return num;
//increment num
num = num + 1 ;
}
return 0 ;
}//To find number to be added
//so sum of array is prime
static int minNumber( int arr[], int n)
{
int sum = 0 ;
//To find sum of array elements
for ( int i = 0 ;
i <
n;
i++)
sum += arr[i];
//if sum is already prime
//return 0
if (isPrime(sum))
return 0 ;
//To find prime number
//greater than sum
int num = findPrime(sum);
//Return difference of
//sum and num
return num - sum;
}//Driver Code
public static void main(String[]args)
{
int arr[] = { 2 , 4 , 6 , 8 , 12 };
int n = arr.length;
System.out.println(minNumber(arr, n));
}
}//This code is contributed by Azkia Anam.
Python3
# Python3 program to find minimum number to
# insert in array so their sum is prime# function to check if a
# number is prime or not
def isPrime(n):# Corner case
if n <
= 1 :
return False# Check from 2 to n - 1
for i in range ( 2 , n):
if n % i = = 0 :
return Falsereturn True# Find prime number
# greater than a number
def findPrime(n):
num = n + 1# find prime greater than n
while (num):# check if num is prime
if isPrime(num):
return num# Increment num
num + = 1return 0# To find number to be added
# so sum of array is prime
def minNumber(arr):
s = 0# To find sum of array elements
for i in range ( 0 , len (arr)):
s + = arr[i]# If sum is already prime
# return 0
if isPrime(s) :
return 0# To find prime number
# greater than sum
num = findPrime(s)# Return differnece of sum and num
return num - s# Driver code
arr = [ 2 , 4 , 6 , 8 , 12 ]
print (minNumber(arr))# This code is contributed by Sachin Bisht
C#
//C# program to find minimum number to
//insert in array so their sum is prime
using System;
class GFG
{
//function to check if a
//number is prime or not
static bool isPrime( int n)
{
//Corner case
if (n <
= 1)
return false ;
//Check from 2 to n - 1
for ( int i = 2;
i <
n;
i++)
if (n % i == 0)
return false ;
return true ;
}//Find prime number
//greater than a number
static int findPrime( int n)
{
int num = n + 1;
//find prime greater than n
while (num>
0)
{//check if num is prime
if (isPrime(num))
return num;
//increment num
num = num + 1;
}
return 0;
}//To find number to be added
//so sum of array is prime
static int minNumber( int []arr, int n)
{
int sum = 0;
//To find sum of array elements
for ( int i = 0;
i <
n;
i++)
sum += arr[i];
//if sum is already prime
//return 0
if (isPrime(sum))
return 0;
//To find prime number
//greater than sum
int num = findPrime(sum);
//Return difference of sum and num
return num - sum;
}//Driver Code
public static void Main()
{
int []arr = { 2, 4, 6, 8, 12 };
int n = arr.Length;
Console.Write(minNumber(arr, n));
}
}//This code is contributed by nitin mittal
PHP
<
?php
//PHP program to find minimum number to
//insert in array so their sum is prime//function to check if a
//number is prime or not
function isPrime( $n )
{//Corner case
if ( $n <
= 1)
return false;
//Check from 2 to n - 1
for ( $i = 2;
$i <
$n ;
$i ++)
if ( $n % $i == 0)
return false;
return true;
}//Find prime number
//greater than a number
function findPrime( $n )
{
$num = $n + 1;
//find prime greater than n
while ( $num )
{
//check if num is prime
if (isPrime( $num ))
return $num ;
//increment num
$num = $num + 1;
}return 0;
}//To find number to be added
//so sum of array is prime
function minNumber( $arr , $n )
{
$sum = 0;
//To find sum of array elements
for ( $i = 0;
$i <
$n ;
$i ++)
$sum += $arr [ $i ];
//if sum is already prime
//return 0
if (isPrime( $sum ))
return 0;
//To find prime number
//greater than sum
$num = findPrime( $sum );
//Return difference of
//sum and num
return $num - $sum ;
}//Driver Code
$arr = array (2, 4, 6, 8, 12);
$n = sizeof( $arr );
echo minNumber( $arr , $n );
//This code is contributed by nitin mittal
?>
输出如下:
5
时间复杂度:O(N^2)
【在数组中插入最小值,以使数组总和成为质数】高效方法:我们可以通过有效地预先计算大型布尔数组来检查数字是否为质数来优化上述方法ant筛。生成所有素数后, 找到刚好大于和的素数并返回它们之间的差。
以下是此方法的实现:
C ++
//C++ program to find minimum number to
//insert in array so their sum is prime
#include <
bits/stdc++.h>
using namespace std;
#define MAX 100005//Array to store primes
bool isPrime[MAX];
//function to calculate primes
//using sieve of eratosthenes
void sieveOfEratostheneses()
{
memset (isPrime, true , sizeof (isPrime));
isPrime[1] = false ;
for ( int i = 2;
i * i <
MAX;
i++)
{
if (isPrime[i])
{
for ( int j = 2 * i;
j <
MAX;
j += i)
isPrime[j] = false ;
}
}
}//Find prime number
//greater than a number
int findPrime( int n)
{
int num = n + 1;
//To return prime number
//greater than n
while (num)
{
//check if num is prime
if (isPrime[num])
return num;
//increment num
num = num + 1;
}
return 0;
}//To find number to be added
//so sum of array is prime
int minNumber( int arr[], int n)
{
//call sieveOfEratostheneses
//to calculate primes
sieveOfEratostheneses();
int sum = 0;
//To find sum of array elements
for ( int i = 0;
i <
n;
i++)
sum += arr[i];
if (isPrime[sum])
return 0;
//To find prime number
//greater then sum
int num = findPrime(sum);
//Return difference of
//sum and num
return num - sum;
}//Driver Code
int main()
{
int arr[] = { 2, 4, 6, 8, 12 };
int n = sizeof (arr) /sizeof (arr[0]);
cout <
<
minNumber(arr, n);
return 0;
}
Java
//Java program to find minimum number to
//insert in array so their sum is primeclass GFG
{
static int MAX = 100005 ;
//Array to store primes
static boolean [] isPrime = new boolean [MAX];
//function to calculate primes
//using sieve of eratosthenes
static void sieveOfEratostheneses()
{
isPrime[ 1 ] = true ;
for ( int i = 2 ;
i * i <
MAX;
i++)
{
if (!isPrime[i])
{
for ( int j = 2 * i;
j <
MAX;
j += i)
isPrime[j] = true ;
}
}
}//Find prime number greater
//than a number
static int findPrime( int n)
{
int num = n + 1 ;
//To return prime number
//greater than n
while (num>
0 )
{
//check if num is prime
if (!isPrime[num])
return num;
//increment num
num = num + 1 ;
}
return 0 ;
}//To find number to be added
//so sum of array is prime
static int minNumber( int arr[], int n)
{
//call sieveOfEratostheneses
//to calculate primes
sieveOfEratostheneses();
int sum = 0 ;
//To find sum of array elements
for ( int i = 0 ;
i <
n;
i++)
sum += arr[i];
if (!isPrime[sum])
return 0 ;
//To find prime number
//greater then sum
int num = findPrime(sum);
//Return difference of
//sum and num
return num - sum;
}//Driver Code
public static void main(String[] args)
{
int arr[] = { 2 , 4 , 6 , 8 , 12 };
int n = arr.length;
System.out.println(minNumber(arr, n));
}
}//This code is contributed by mits
Python3
# Python3 program to find minimum number to
# insert in array so their sum is primeisPrime = [ 1 ] * 100005# function to calculate prime
# using sieve of eratosthenes
def sieveOfEratostheneses():
isPrime[ 1 ] = False
i = 2
while i * i <
100005 :
if (isPrime[i]):
j = 2 * i
while j <
100005 :
isPrime[j] = False
j + = i
i + = 1
return# Find prime number
# greater than a number
def findPrime(n):
num = n + 1# find prime greater than n
while (num):# check if num is prime
if isPrime[num]:
return num# Increment num
num + = 1return 0# To find number to be added
# so sum of array is prime
def minNumber(arr):# call sieveOfEratostheneses to
# calculate primes
sieveOfEratostheneses()s = 0# To find sum of array elements
for i in range ( 0 , len (arr)):
s + = arr[i]# If sum is already prime
# return 0
if isPrime展开 = = True :
return 0# To find prime number
# greater than sum
num = findPrime(s)# Return differnece of
# sum and num
return num - s# Driver code
arr = [ 2 , 4 , 6 , 8 , 12 ]
print (minNumber(arr))# This code is contributed by Sachin Bisht
C#
//C# program to find minimum number to
//insert in array so their sum is primeclass GFG
{
static int MAX = 100005;
//Array to store primes
static bool [] isPrime = new bool [MAX];
//function to calculate primes
//using sieve of eratosthenes
static void sieveOfEratostheneses()
{
isPrime[1] = true ;
for ( int i = 2;
i * i <
MAX;
i++)
{
if (!isPrime[i])
{
for ( int j = 2 * i;
j <
MAX;
j += i)
isPrime[j] = true ;
}
}
}//Find prime number greater
//than a number
static int findPrime( int n)
{
int num = n + 1;
//To return prime number
//greater than n
while (num>
0)
{
//check if num is prime
if (!isPrime[num])
return num;
//increment num
num = num + 1;
}
return 0;
}//To find number to be added
//so sum of array is prime
static int minNumber( int [] arr, int n)
{
//call sieveOfEratostheneses
//to calculate primes
sieveOfEratostheneses();
int sum = 0;
//To find sum of array elements
for ( int i = 0;
i <
n;
i++)
sum += arr[i];
if (!isPrime[sum])
return 0;
//To find prime number
//greater then sum
int num = findPrime(sum);
//Return difference of
//sum and num
return num - sum;
}//Driver Code
public static void Main()
{
int [] arr = { 2, 4, 6, 8, 12 };
int n = arr.Length;
System.Console.WriteLine(minNumber(arr, n));
}
}//This code is contributed by mits
PHP
<
?php//PHP program to find minimum number to
//insert in array so their sum is prime $MAX =100005;
//function to calculate primes
//using sieve of eratosthenes
function sieveOfEratostheneses()
{
$isPrime = array_fill (true, $MAX , NULL);
$isPrime [1] = false;
for ( $i = 2;
$i * $i <
$MAX ;
$i ++)
{
if ( $isPrime [ $i ])
{
for ( $j = 2 * $i ;
$j <
$MAX ;
$j += $i )
$isPrime [ $j ] = false;
}
}
} //Find prime number
//greater than a number
function findPrime( $n )
{
$num = $n + 1;
//To return prime number
//greater than n
while ( $num )
{
//check if num is prime
if ( $isPrime [ $num ])
return $num ;
//increment num
$num = $num + 1;
}
return 0;
} //To find number to be added
//so sum of array is prime
function minNumber(&
$arr , $n )
{
//call sieveOfEratostheneses
//to calculate primes
sieveOfEratostheneses();
$sum = 0;
//To find sum of array elements
for ( $i = 0;
$i <
$n ;
$i ++)
$sum += $arr [ $i ];
if ( $isPrime [ $sum ])
return 0;
//To find prime number
//greater then sum
$num = findPrime( $sum );
//Return difference of
//sum and num
return $num - $sum ;
} //Driver Code $arr = array ( 2, 4, 6, 8, 12 );
$n = sizeof( $arr ) /sizeof( $arr [0]);
echo minNumber( $arr , $n );
return 0;
?>
输出如下:
5
时间复杂度:O(N log(log N))
如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。
推荐阅读
- C++ STL中的set::erase用法介绍
- 条形码和NFC之间有什么区别()
- Linux中的pr命令用法详细介绍
- 算法题(最长回文子串的长度)
- 查找两个字符串中不常见的字符|S2
- C++ STL中的multiset多集cbegin()和cend()函数
- Python GUI Tkinter入门用法指南
- 并发控制技术详细介绍
- Win8.1如何给“这台电脑”改名?