百练_4138:质数的和与积

来源:互联网 发布:centos 安装桌面 编辑:程序博客网 时间:2024/06/06 12:40
描述

两个质数的和是S,它们的积最大是多少?

输入
一个不大于10000的正整数S,为两个质数的和。
输出
一个整数,为两个质数的最大乘积。数据保证有解。
样例输入
50
样例输出
589


(解题来源别人博客,写的不错在这借鉴学习一下)

#include <cstdio>#include <algorithm>using namespace std;const int Tmax=10005;int n;bool v[Tmax];void init(){    int i,j;    v[1]=true;    for(i=2;i<=n;i++)      for(j=i+i;j<=n;j+=i)        v[j]=true;    return;}void work(){    int i,j,sum=0;    if(n%2==0)    {        i=j=n/2;        while(v[i]==true||v[j]==true)        {            i++;            j--;        }        sum=i*j;    }    else {        i=(n+1)/2;        j=i+1;        while(v[i]==true||v[j]==true)        {            i++;            j--;        }        if(i+j==n&&v[i]==false&&v[j]==false) sum=i*j;        j=(n+1)/2;        i=j-1;        while(v[i]==true||v[j]==true)        {            i++;            j--;        }        if(i+j==n&&v[i]==false&&v[j]==false) sum=max(sum,i*j);    }    printf("%d\n",sum);    return;}int main(){    scanf("%d",&n);    init();     work();    return 0;}