从中间n/2向两侧遍历,找到第一组和为n的素数组合就打印即可,一定注意要加break,不然会继续遍历打印其它素数组合
Prime_number:判断一个数后是否是素数的标准是看除了1和它本身是否有其它数可以作为它的因数,有的话就不是返回false
#include<iostream> #include<math.h> using namespace std; //是否是素数 bool Prime_number(int a) { for(int i=2;i<=sqrt(a);++i) //开方或者二分 { if(a%i==0) return false;//不是素数 } return true;//是素数 } int main() { int num; int i,j; while(cin>>num) { //从中间开始查找, //好处1:找到的第一组素数对就能确保差值是最小的 //好处2:从中间开始找,却保了两数之和是输入的那个偶数 for(i=num/2,j=num/2;i>=1,j<=num;--i,++j) { if(Prime_number(i) && Prime_number(j)) { cout<<i<<endl<<j<<endl; break; } } } return 0; }