题意:
给一个偶数,输出两个彼此最接近的素数,其和等于该偶数.
Sample Input
20 30 40
Sample Output
7 13 13 17 17 23
题解:
通过观察7 13关于10对称,13和17关于15对称,所以两个素数是关于偶数的一半对称的。所以我们只需要从1暴力枚举到偶数的一半,计算出另一个数,并判断两个数是不是都是素数即可。
代码:
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
bool isprime(int num)
{
int judge = sqrt(num);
for(int i=2;i<=judge;i++)
if(num%i==0) return false;
return true;
}
int main()
{
int M;
while(cin>>M)
{
int mid = M/2;
for(int i=mid;i>0;i--)
{
if(isprime(i))
{
int right = mid+(mid-i);
if(isprime(right))
{
cout<<i<<" "<<right<<endl;
break;
}
}
}
}
return 0;
}