这题对时间要求很高,很多复杂度高的算法都不能使用
首先是判断是否为质数,传统判断方法不能用,会超时,应当使用埃氏筛
然后是判断不重复的数量,如果使用Set就会超时,应当使用布尔数组来存储存在情况
总体来说,这题还是很看重时间复杂度优化的
import java.util.Arrays;
import java.util.Scanner;
import java.util.HashSet;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int m=sc.nextInt();
int a[]=new int[n];
int b[]=new int[m];
for(int i=0;i<n;i++) {
a[i]=sc.nextInt();
}
for(int i=0;i<m;i++) {
b[i]=sc.nextInt();
}
HashSet<Integer> set=new HashSet();
int max=n+m;
boolean isPrime[]=new boolean[max+1];
Arrays.fill(isPrime,true);
isPrime[0]=false;
isPrime[1]=false;
for(int i=2;i*i<=max;i++) {
if(isPrime[i]) {
for(int j=i*i;j<=max;j+=i) {
isPrime[j]=false;
}
}
}
boolean exist[]=new boolean[max+1];
for(int i=0;i<n;i++) {
for(int j=0;j<m;j++) {
int t=a[i]+b[j];
if(t<=n+m) {
exist[t]=true;
}
}
}
int count=0;
for(int i=0;i<=max;i++) {
if(exist[i]&&isPrime[i]) {
count++;
}
}
System.out.println(count);
}
}



京公网安备 11010502036488号