P1030 质数的和与积
描述
两个质数的和是S,它们的积最大是多少?
格式
输入格式
一个不大于10000的正整数S,为两个质数的和。
输出格式
一个整数,为两个质数的最大乘积。数据保证有解。
样例
输入样例
50
输出样例
589
限制
时间限制: 1000 ms
内存限制: 65536 KB
这个题目的数据量不大
第一种
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
int arr[10005];
void prime()
{
//使用埃式筛法
arr[0]=arr[1]=0;
for(int i=2;i<=10000;i++)
{
if(arr[i]==1)
{
for(int j=2*i;j<=10000;j+=i)
{
arr[j]=0;
}
}
}
}
int main()
{
int n;
cin>>n;
for(int i=0;i<10005;i++)arr[i]=1;
prime();
for(int i=n/2;i>=2;i--)
{
if(arr[i]==1&&arr[n-i]==1)
{
cout<<i*(n-i)<<endl;
break;
}
}
return 0;
}
第二种
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
int prime(int n)
{
for(int i=2; i*i<=n; i++)
{
if(n%i==0)return 0;
}
return 1;
}
int main()
{
int sum,a,b,max_number=0;
cin>>sum;
for(int i=sum/2; i>=2; i--)
{
if(prime(i)&&prime(sum-i))
{
cout<<i*(sum-i)<<endl;
return 0;
}
}
}