===========================================
题目描述
//若两个正整数的和为素数,则这两个正整数称之为“素数伴侣”,如2和5、6和13,它们能应用于通信加密。现在密码学会请你设计一个程序,从已有的N(N为偶数)个正整数中挑选出若干对组成“素数伴侣”,挑选方案多种多样,例如有4个正整数:2,5,6,13,如果将5和6分为一组中只能得到一组“素数伴侣”,而将2和5、6和13编组将得到两组“素数伴侣”,能组成“素数伴侣”最多的方案称为“最佳方案”,当然密码学会希望你寻找出“最佳方案”。
//输入:
//有一个正偶数N(N≤100),表示待挑选的自然数的个数。后面给出具体的数字,范围为[2,30000]。
//输出:
//输出一个整数K,表示你求得的“最佳方案”组成“素数伴侣”的对数。
//
//知识点 查找,搜索,排序
//运行时间限制 10M
//内存限制 128
//输入
//输入说明
//1 输入一个正偶数n
//2 输入n个整数
//输出
//求得的“最佳方案”组成“素数伴侣”的对数。
//样例输入 4 2 5 6 13
//样例输出 2
==========================================
三次没有通过 蓝瘦香菇
明明测了好几个都没错的呀 今天运势不好
===========================================
package package02;
import java.util.Scanner;
//题目描述
//若两个正整数的和为素数,则这两个正整数称之为“素数伴侣”,如2和5、6和13,它们能应用于通信加密。现在密码学会请你设计一个程序,从已有的N(N为偶数)个正整数中挑选出若干对组成“素数伴侣”,挑选方案多种多样,例如有4个正整数:2,5,6,13,如果将5和6分为一组中只能得到一组“素数伴侣”,而将2和5、6和13编组将得到两组“素数伴侣”,能组成“素数伴侣”最多的方案称为“最佳方案”,当然密码学会希望你寻找出“最佳方案”。
//输入:
//有一个正偶数N(N≤100),表示待挑选的自然数的个数。后面给出具体的数字,范围为[2,30000]。
//输出:
//输出一个整数K,表示你求得的“最佳方案”组成“素数伴侣”的对数。
//
//知识点 查找,搜索,排序
//运行时间限制 10M
//内存限制 128
//输入
//输入说明
//1 输入一个正偶数n
//2 输入n个整数
//输出
//求得的“最佳方案”组成“素数伴侣”的对数。
//样例输入 4 2 5 6 13
//样例输出 2
public class oj036 {
int maxcount=0;
//使用全排列
void permutation(int[] a,int k,int m)
{
int i,j;
if(k == m)
{
int count=0;
for(i=0;i<=m;i++)
{
//根据这种排列的结果 找素数对
if(i<m)
{
System.out.print(a[i]);System.out.print(a[i+1]);
if(isPrime(a[i]+a[i+1])){count++;}
i++;
}
}
if(count>maxcount){maxcount=count;}
System.out.println();
}
else
{
for(j=k;j<=m;j++)
{
int t=a[j];
a[j]=a[k];
a[k]=t;
permutation(a,k+1,m);
t=a[j];
a[j]=a[k];
a[k]=t;
}
}
}
public boolean isPrime(int n) {
boolean re = true;
for (int i = 2; i < n; i++) {
if (n % i == 0) {
re = false;
break;
}
}
if (n <= 1) {
re = false;
}
return re;
}
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
int[] number=new int[n];
for(int i=0;i<n;i++)
{
number[i]=scanner.nextInt();
}
oj036 oj=new oj036();
oj.permutation(number, 0, n-1);
System.out.print(oj.maxcount);
}
}