Description du titre
Tout nombre pair (supérieur à 2) peut être composé de deux nombres premiers. Il existe de nombreuses situations dans lesquelles deux nombres premiers forment un nombre pair. Cette question nécessite la sortie d'une paire de nombres premiers qui forme un nombre pair spécifié avec le plus petit différence entre les deux nombres premiers.
Cette question contient plusieurs ensembles d'exemples d'entrée.
Entrez la description:
Entrez un nombre pair
Description de la sortie:
Sortie de deux nombres premiers
Exemple d'
entrée20
Production
7
13
Analyse thématique
- Premièrement, nous devons déterminer si un nombre est premier. Ici, la plage des nombres premiers est jugée de 2 à la racine carrée n. S'il y a un nombre dans cet intervalle qui peut être divisible par n, cela signifie que n n'est pas un nombre premier; sinon, n est un nombre premier.
- Trouvez des nombres premiers appropriés de la moitié de ce nombre pair aux deux côtés, de sorte que vous puissiez vous assurer que la différence entre les deux nombres premiers est la plus petite. Si vous la trouvez, vous pouvez sauter hors de la boucle.
Code de référence
#include <iostream>
#include <math.h>
using namespace std;
bool isPrime(int n)
{
int sq = sqrt(n);
for(int i = 2; i <= sq; ++i)
{
if(n%i == 0)
return false;
}
return true;
}
int main()
{
int num;
while(cin >> num)
{
int half = num/2;
int i = 0;
for(i = half; i > 2; ++i)
{
if(isPrime(i) && isPrime(num-i))
break;
}
cout << num-i << endl << i << endl;
}
return 0;
}