hdu 1262 寻找素数

来源:互联网 发布:二维码生成算法 c语言 编辑:程序博客网 时间:2024/05/24 07:18

主题思想: 寻找素数。 给一个偶数,要求寻找最近的素数对,使这两个素数的和等于这个偶数。

我的思路是,首先对这个偶数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;        }    }}
原创粉丝点击