题目描述
两个质数的和是 S,它们的积最大是多少?
输入格式
一个不大于 10000 的正整数 S,为两个质数的和。
输出格式
一个整数,为两个质数的最大乘积。数据保证有解。
输入输出样例
输入
50
输出
589
源码
import java.util.Scanner;
public class Main {
public static int[] prime = new int[10000];
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int S = sc.nextInt();
getPrime(S);//生成质数
int[] tmp = prime;//复制生成的质数数组
int max = 0;//初始化最大积
int product = 0;
for(int i=0;i<S;i++) {
if(prime[i]!=0) {//减小循环次数
for(int j=0;j<S;j++) {
if(tmp[i]!=0) {//减小循环次数
if(prime[i]+tmp[j]==S) {
product = prime[i]*tmp[j];
if(product>max) {
max = product;
}
}
}
}
}
}
System.out.println(max);
}
//生成不大于S的所有质数,放在数组prime
public static void getPrime(int S) {
int k=0;
for(int i=2;i<S;i++) {
boolean flag = true;
for(int j=2;j<=Math.sqrt(i);j++) {
if(i%j==0) {
flag = false;
break;
}
}
if(flag) {
prime[k]=i;
k++;
}
}
}
}