基础题,暴力搜索即可。首先求出10000以内的所有素数,然后遍历所有素数对,找出和为给定的偶数,且差值最小的素数对。(注意两个素数可以相等)
#include <iostream>
using namespace std;
const int MAXM = 10005;
int prime[MAXM]; //10000以内的所有素数
//判断x是否为素数
bool isPrime(int x)
{
if (x == 1)
return false;
for (int i = 2; i <= x / 2; i++)
{
if (x % i == 0)
return false;
}
return true;
}
int main()
{
int num = 0;
for (int i = 1; i < MAXM; i++) //填充10000以内的素数
{
if (isPrime(i))
prime[num++] = i;
}
int M;
while (cin >> M)
{
int A, B; //两个素数
int minDif = M; //最小差值
for (int i = 0; i < num; i++) //暴力搜索
{
for (int j = i; j < num; j++)
{
if (prime[i] + prime[j] == M && prime[j] - prime[i] < minDif)
{
A = prime[i];
B = prime[j];
minDif = prime[j] - prime[i];
}
}
}
cout << A << " " << B << endl;
}
return 0;
}
继续加油。