求两个素数的和

给定一个偶数(大于2),打印两个素数,其和等于给定的数。可能有几种组合。只打印第一对。 有趣的一点是,解决方案总是根据 哥德巴赫猜想 . 例如:

null
Input: n = 74Output: 3 71Input : n = 1024Output: 3 1021Input: n = 66Output: 5 61Input: n = 9990Output: 17 9973

其思想是使用 埃拉托斯坦筛。 一旦我们有了一个告诉所有素数的数组,我们就可以遍历这个数组,找到具有给定和的对。

C++

// C++ program to find a prime number pair whose
// sum is equal to given number
// C++ program to print super primes less than
// or equal to n.
#include<bits/stdc++.h>
using namespace std;
// Generate all prime numbers less than n.
bool SieveOfEratosthenes( int n, bool isPrime[])
{
// Initialize all entries of boolean array
// as true. A value in isPrime[i] will finally
// be false if i is Not a prime, else true
// bool isPrime[n+1];
isPrime[0] = isPrime[1] = false ;
for ( int i=2; i<=n; i++)
isPrime[i] = true ;
for ( int p=2; p*p<=n; p++)
{
// If isPrime[p] is not changed, then it is
// a prime
if (isPrime[p] == true )
{
// Update all multiples of p
for ( int i=p*p; i<=n; i += p)
isPrime[i] = false ;
}
}
}
// Prints a prime pair with given sum
void findPrimePair( int n)
{
// Generating primes using Sieve
bool isPrime[n+1];
SieveOfEratosthenes(n, isPrime);
// Traversing all numbers to find first
// pair
for ( int i=0; i<n; i++)
{
if (isPrime[i] && isPrime[n-i])
{
cout << i << " " << (n-i);
return ;
}
}
}
// Driven program
int main()
{
int n = 74;
findPrimePair(n);
return 0;
}


JAVA

// Java program to find a prime number pair whose
// sum is equal to given number
// Java program to print super primes less than
// or equal to n.
class GFG
{
// Generate all prime numbers less than n.
static boolean SieveOfEratosthenes( int n, boolean isPrime[])
{
// Initialize all entries of boolean
// array as true. A value in isPrime[i]
// will finally be false if i is Not a
// prime, else true bool isPrime[n+1];
isPrime[ 0 ] = isPrime[ 1 ] = false ;
for ( int i = 2 ; i <= n; i++)
isPrime[i] = true ;
for ( int p = 2 ; p * p <= n; p++)
{
// If isPrime[p] is not changed,
// then it is a prime
if (isPrime[p] == true )
{
// Update all multiples of p
for ( int i = p * p; i <= n; i += p)
isPrime[i] = false ;
}
}
return false ;
}
// Prints a prime pair with given sum
static void findPrimePair( int n)
{
// Generating primes using Sieve
boolean isPrime[]= new boolean [n + 1 ];
SieveOfEratosthenes(n, isPrime);
// Traversing all numbers to find first
// pair
for ( int i = 0 ; i < n; i++)
{
if (isPrime[i] && isPrime[n - i])
{
System.out.print(i + " " + (n - i));
return ;
}
}
}
// Driver code
public static void main (String[] args)
{
int n = 74 ;
findPrimePair(n);
}
}
// This code is contributed by Anant Agarwal.


Python 3

# Python 3 program to find a prime number
# pair whose sum is equal to given number
# Python 3 program to print super primes
# less than or equal to n.
# Generate all prime numbers less than n.
def SieveOfEratosthenes(n, isPrime):
# Initialize all entries of boolean
# array as True. A value in isPrime[i]
# will finally be False if i is Not a
# prime, else True bool isPrime[n+1]
isPrime[ 0 ] = isPrime[ 1 ] = False
for i in range ( 2 , n + 1 ):
isPrime[i] = True
p = 2
while (p * p < = n):
# If isPrime[p] is not changed,
# then it is a prime
if (isPrime[p] = = True ):
# Update all multiples of p
i = p * p
while (i < = n):
isPrime[i] = False
i + = p
p + = 1
# Prints a prime pair with given sum
def findPrimePair(n):
# Generating primes using Sieve
isPrime = [ 0 ] * (n + 1 )
SieveOfEratosthenes(n, isPrime)
# Traversing all numbers to find
# first pair
for i in range ( 0 , n):
if (isPrime[i] and isPrime[n - i]):
print (i,(n - i))
return
# Driven program
n = 74
findPrimePair(n)
# This code is contributed by
# Smitha Dinesh Semwal


C#

// C# program to find a prime number pair whose
// sum is equal to given number
// C# program to print super primes less than
// or equal to n.
using System;
class GFG
{
// Generate all prime numbers less than n.
static bool SieveOfEratosthenes( int n, bool []isPrime)
{
// Initialize all entries of boolean
// array as true. A value in isPrime[i]
// will finally be false if i is Not a
// prime, else true bool isPrime[n+1];
isPrime[0] = isPrime[1] = false ;
for ( int i = 2; i <= n; i++)
isPrime[i] = true ;
for ( int p = 2; p * p <= n; p++)
{
// If isPrime[p] is not changed,
// then it is a prime
if (isPrime[p] == true )
{
// Update all multiples of p
for ( int i = p * p; i <= n; i += p)
isPrime[i] = false ;
}
}
return false ;
}
// Prints a prime pair with given sum
static void findPrimePair( int n)
{
// Generating primes using Sieve
bool []isPrime= new bool [n + 1];
SieveOfEratosthenes(n, isPrime);
// Traversing all numbers to find first
// pair
for ( int i = 0; i < n; i++)
{
if (isPrime[i] && isPrime[n - i])
{
Console.Write(i + " " + (n - i));
return ;
}
}
}
// Driver code
public static void Main ()
{
int n = 74;
findPrimePair(n);
}
}
// This code is contributed by vt_m.


PHP

<?php
// PHP program to find a prime
// number pair whose sum is equal
// to given number
// Generate all prime numbers
// less than n.
function SieveOfEratosthenes( $n , & $isPrime )
{
// Initialize all entries of
// boolean array as true. A value
// in isPrime[i] will finally
// be false if i is Not a prime,
// else true bool isPrime[n+1];
$isPrime [0] = $isPrime [1] = false;
for ( $i = 2; $i <= $n ; $i ++)
$isPrime [ $i ] = true;
for ( $p = 2; $p * $p <= $n ; $p ++)
{
// If isPrime[p] is not changed,
// then it is a prime
if ( $isPrime [ $p ] == true)
{
// Update all multiples of p
for ( $i = $p * $p ;
$i <= $n ; $i += $p )
$isPrime [ $i ] = false;
}
}
}
// Prints a prime pair with given sum
function findPrimePair( $n )
{
// Generating primes using Sieve
$isPrime = array_fill (0, $n + 1, NULL);
SieveOfEratosthenes( $n , $isPrime );
// Traversing all numbers
// to find first pair
for ( $i = 0; $i < $n ; $i ++)
{
if ( $isPrime [ $i ] &&
$isPrime [ $n - $i ])
{
echo $i . " " . ( $n - $i );
return ;
}
}
}
// Driver Code
$n = 74;
findPrimePair( $n );
// This code is contributed
// by ChitraNayal
?>


Javascript

<script>
// Javascript program to find a prime number pair whose
// sum is equal to given number
// Java program to print super primes less than
// or equal to n.
// Generate all prime numbers less than n.
function SieveOfEratosthenes(n,isPrime)
{
// Initialize all entries of boolean
// array as true. A value in isPrime[i]
// will finally be false if i is Not a
// prime, else true bool isPrime[n+1];
isPrime[0] = isPrime[1] = false ;
for (let i = 2; i <= n; i++)
isPrime[i] = true ;
for (let p = 2; p * p <= n; p++)
{
// If isPrime[p] is not changed,
// then it is a prime
if (isPrime[p] == true )
{
// Update all multiples of p
for (let i = p * p; i <= n; i += p)
isPrime[i] = false ;
}
}
return false ;
}
// Prints a prime pair with given sum
function findPrimePair(n)
{
// Generating primes using Sieve
let isPrime = new Array(n+1);
for (let i=0;i<n+1;i++)
{
isPrime[i]= false ;
}
SieveOfEratosthenes(n, isPrime);
// Traversing all numbers to find first
// pair
for (let i = 0; i < n; i++)
{
if (isPrime[i] && isPrime[n - i])
{
document.write(i + " " + (n - i));
return ;
}
}
}
// Driver code
let  n = 74;
findPrimePair(n);
// This code is contributed by rag2127
</script>


输出:

3 71

本文由 拉凯什·库马尔 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 写极客。组织 或者把你的文章寄去评论-team@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。 如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享