解题思路是由于两个数的和加起来是n,那么查找范围可以缩小到n的一半找是否是素数,如果是并且n-i也是素数,那么就比较当前的差值是否比之前的差值小,如果小就保存当前的状态。最后得到的就是最接近的两个素数。
#include<iostream>
#include<math.h>
#define IN 2147483647
using namespace std;
bool isPrime(int n)
{
for(int j=2;j<=sqrt((double)n);j++)
{
if(n%j == 0)
return false;
}
return true;
}
int main()
{
int n;
cin>>n;
int dis = IN;
int status = 0;
for(int i=2;i<=n/2;i++)
{
if(isPrime(i)&&isPrime(n-i))
{
int temp = n-2*i;
if(temp<dis)
{
dis = temp;
status = i;
}
}
}
cout<<status<<endl;
cout<<n-status<<endl;
return 0;
}