您的位置:首页 > 其它

hdu 1262 寻找素数

2017-09-19 21:17 267 查看
主题思想: 寻找素数。 给一个偶数,要求寻找最近的素数对,使这两个素数的和等于这个偶数。

我的思路是,首先对这个偶数n,求其一半的值m=n/2。

如果m是一个素数,m就是所求。

令a=m,b=m; 如果a,b是偶数,则a=a-1;b=b+1;只有奇数才有可能是素数,如果a,b是奇数,则a=a-2;b=b+2才保证a,b是奇数,

再验证是否是素数。

AC代码:

#include <iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;

bool isPrime(int n){

if(n==2||n==3||n==5||n==7) return true;

if(n%2==0||n%3==0||n%5==0||n%7==0) return false;

int len=sqrt(n);
for(int i=2;i<=len;i++){

if(n%i==0) return false;
}
return true;

}
int main()
{
int n=10000;
int cnt=0;
int m;
int a,b;
// n is even ,
while(scanf("%d",&n)!=EOF){
int m=n/2;
if(isPrime(m)){

printf("%d %d\n",m,m);
continue;
}
a=m;
b=m;
while(true){

if(isPrime(a)&&isPrime(b)){
printf("%d %d\n",a,b);
break;
}
if(a%2==0)a=a-1;
else a=a-2;
if(b%2==0) b=b+1;
else b=b+2;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: