一、题目


二、解题思路
首先读取两个数组的长度并输入数组元素,接着通过双层循环遍历两个数组中的所有元素组合,计算每一组元素的和,先判断该和是否不超过数组长度之和,再对符合条件的和进行质数判断,若为质数则检查是否已记录过,未重复的质数就存入数组并计数,最终输出不重复的质数总个数。
三、代码
java
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
//在此输入您的代码...
int num1=scan.nextInt();
int num2=scan.nextInt();
int sum=num1+num2;
int count=0;
int temp=0;
boolean is=true;
boolean cz=false;
int arr1[]=new int[num1];
int arr2[]=new int[num2];
int temp2[]=new int[sum];
for(int i=0;i<num1;i++){
arr1[i]=scan.nextInt();
}
for(int j=0;j<num2;j++){
arr2[j]=scan.nextInt();
}
for(int k=0;k<num1;k++){
for(int p=0;p<num2;p++){
temp=arr1[k]+arr2[p];
if(temp<=sum){
// 判断两数之和是否为质数
for(int z=2;z<=temp/2;z++){
if(temp%z==0){
is=false;
break;
}
}
//两数之和为质数
if(is==true){
//判断两数之和是否重复
for(int o=0;o<count;o++){
if(temp2[o]==temp){
cz=true;
break;
}
}
//两束之和不重复
if(cz==false){
temp2[count]=temp;
count++;
}
}
is=true;
cz=false;
}else{
continue;
}
}
}
System.out.println(count);
scan.close();
}
}
四、知识点总结
1、质数
(也叫素数 )是大于 1 的自然数 ,并且除了 1 和它本身以外,不能被其他自然数整除。
简单说:
- 一个数如果只能被 1 和 它自己 整除,没有别的因数,它就是质数。
- 反之,如果除了 1 和自己还有别的因数,就叫合数。
2、输入输出 (I/O)
java.util.Scanner类的使用 :用于从标准输入流(键盘)读取数据。nextInt():读取整数。close():关闭扫描器,释放资源(良好的编程习惯)。
- 标准输出 :使用
System.out.println()将结果打印到控制台。
3、变量与数据类型
- 基本数据类型 :使用了
int(整型) 和boolean(布尔型)。 - 变量声明与初始化 :定义了计数器 (
count)、临时变量 (temp)、标志位 (is,cz) 等。
4、 数组 (Array)
- 数组的声明与创建 :
new int[size]动态创建指定长度的整型数组。arr1,arr2:存储输入的两组数据。temp2:作为"集合"使用,用于存储不重复的质数和(这里用数组模拟了集合的去重功能)。
- 数组的遍历与赋值 :通过下标访问数组元素 (
arr[i] = ...)。
5、流程控制结构
for循环 :- 单层循环:用于读取数组元素、判断质数、检查重复性。
- 嵌套循环 (双重循环) :核心逻辑部分,遍历
arr1和arr2的所有组合 ( O(N×M)O(N×M) 复杂度),计算两数之和。
if-else条件判断 :- 判断和是否小于等于总和 (
temp <= sum)。 - 判断是否为质数。
- 判断结果是否已存在(去重逻辑)。
- 判断和是否小于等于总和 (
break语句 :- 在发现因子时立即跳出内层循环(优化质数判断)。
- 在发现重复值时立即跳出检查循环。
continue语句:当和超过限制时,跳过本次循环剩余部分。
6、基础算法逻辑
- 质数判断算法 (Primality Test) :
- 逻辑:尝试用 22 到 temp/2temp/2 之间的所有整数去除
temp。 - 标志位法:使用
boolean is标记是否为质数,初始化为true,一旦发现能整除则设为false。 - 注:这是一个基础的试除法,虽然效率不是最高(通常只需遍历到 temptemp ),但在初学者题目中很常见。
- 逻辑:尝试用 22 到 temp/2temp/2 之间的所有整数去除
- 数组去重 (Deduplication) :
- 在没有使用
HashSet等集合类的情况下,手动实现去重。 - 逻辑:每产生一个新结果,遍历已存储结果的数组 (
temp2),如果不存在则加入,存在则忽略。
- 在没有使用
- 计数逻辑 :使用
count变量既作为最终结果的输出,也作为temp2数组的有效长度索引。