2017校招-腾讯:素数对

题目描述

给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输出结果。输入值小于1000。
如,输入为10, 程序应该输出结果为2。(共有两对质数的和为10,分别为(5,5),(3,7))

输入描述

输入包括一个整数n,(3 ≤ n < 1000)

输出描述

输出对数

示例1

输入
10
输出
2

解题代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import java.util.*;

public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int ans = 0;
int n = sc.nextInt();
Set<Integer> primes = new HashSet<>();
for (int i = 2; i < n; i++) {
if (isPrime(i)) {
primes.add(i);
}
}
for (Integer ele : primes) {
if (primes.contains(n - ele)) {
ans++;
}
}
System.out.println(ans % 2 == 0 ? ans/2 : ans/2 + 1);
}

private static boolean isPrime(int num) {
for (int i = 2; i < (int)Math.sqrt(num)+1; i++) {
if (num % i == 0) {
return false;
}
}
return true;
}
}
您的支持将鼓励我继续创作!