华为OJ(查找组成一个偶数最接近的两个素数)

来源:互联网 发布:win7 upnp nat端口失败 编辑:程序博客网 时间:2024/05/16 05:20

首先判断n/2是否是素数,如果是,那么刚好输出;如果不是素数,i从half-1开始递减至第一个素数停止,j从half+1递增至第一个素数停止,随时判断两数是否是素数和是否为n。

开始因为格式不对,呃呃呃,谁知道是空格还是回车呢?后来因为sqrt重载的问题编译出错,使用(double或float)强制类型转换或者sqrtf可以解决,下面是通过测试的代码:

#include<iostream>using namespace std;void primepair(int);bool isprime(int);int main(){int n;cin>>n;while(n<=5||n>10000)cin>>n;primepair(n);//system("pause");return 0;}void primepair(int n){int half=n/2;int minprime=0,maxprime=0;if(isprime(half))cout<<half<<endl<<half<<endl;else{for(int i=half-1,j=half+1;i>=2&&j<n;){if(i+j<n&&isprime(i)&&isprime(j))++j;if(i+j>n&&isprime(i)&&isprime(j))--i;if(i+j==n&&isprime(i)&&isprime(j)){cout<<i<<" "<<j<<endl;break;}if(!isprime(i))--i;if(!isprime(j))++j;}}}bool isprime(int n){for(int i=2;i<=sqrtf(n);++i)if(n%i==0)return false;return true;}


0 0