题目对题目的理解由第一段我们可以知道要用一个大小为n的数组A去存储上半部分一个大小为m的数组去存储下半部分我们还要用Sab,来组合完整口诀由第二段我们要首先保证S是个质数在主方法里面信整一个函数加上要保证Smn;判断S是不是质数的方法public static boolean isPrimeOptimized(int n) { if (n 2) return false; if (n 2 || n 3) return true; if (n % 2 0 || n % 3 0) return false; // 检查6k±1形式的因数 for (int i 5; i * i n; i 6) { if (n % i 0 || n % (i 2) 0) { return false; } } return true; }质数除了1和他本身外不能被其他自然数整除的数。在这种方法中因为质数是大于1的所以返回错误n2或n3时也是质数if (n % 2 0 || n % 3 0) return false;这一行是去排除偶数和能被3整除的数任何质数都能表示为6k1或6k-1的形式我们以步长为6递增如果 n 有一个大于 √n 的因数那么必然存在一个小于 √n 的因数所以只需检查到根号n故有i*Inif (n % i 0 || n % (i 2) 0)这一行中是检查能不能被6k-1或6k1整除若能整除则说明不是质数完整代码import java.util.HashSet; import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改 public class Main { //判断一个数是否为质数 public static boolean isPrimeOptimized(int n) { if (n 2) return false; if (n 2 || n 3) return true; if (n % 2 0 || n % 3 0) return false; // 检查6k±1形式的因数 for (int i 5; i * i n; i 6) { if (n % i 0 || n % (i 2) 0) { return false; } } return true; } public static void main(String[] args) { Scanner scan new Scanner(System.in); //在此输入您的代码... int nscan.nextInt();//输入n int mscan.nextInt();//输入m int[] Anew int[n];//建立存放n个正整数的数组 int[] Bnew int[m];//存放m个正整数的数组 for(int i0;iA.length;i){ A[i]scan.nextInt();//输入n个整数 } for(int i0;iB.length;i){ B[i]scan.nextInt();//输入m个整数 } HashSetInteger setnew HashSet();//建立一个哈希表去重 for(int i0;in;i){ for(int j0;jm;j){ int SA[i]B[j]; if(mnSisPrimeOptimized(S)){ set.add(S); } } } System.out.println(set.size());//不要忘记去重 scan.close(); } }理解这段代码先有一个判断是不是质数下面是主方法首先是输入n个数和m个数接着引入哈希表去重 HashSetInteger setnew HashSet();因为题目中说要不同的方法代码之中开始没有排除。最后把符合条件的S添加到哈希表HashSet中再获得大小。‘此题可解。