1007 素数对猜想 (20分)
原题链接:传送门
一、题目:
输入格式:
输入在一行给出正整数N。
输出格式:
在一行中输出不超过N的满足猜想的素数对的个数。
输入样例 1:
20
输出样例 1:
4
二、解析:
思路:
循环判断在输入值范围内的数是否是素数,如果是加入到list中。然后再循环遍历list,判断是否相邻的素数差值为2,如果是则输出的结果加一。
注意:
判断素数时,需要使用Math.sqrt()来缩小函数的范围。
同时,输入的数字N也是包括在素数判断中的。
AC代码:
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/**
* 1007 素数对猜想 (20 分)
*
* @author: ChangSheng
* @date: 2019年11月26日 下午5:56:02
*/
public class Main {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int n = s.nextInt();
List<Integer> primes = new ArrayList<>(); // 素数s
for (int i = 2; i <= n; i++) {
if (isPrim(i)) primes.add(i);
}
int result = 0;
for (int i = 0; i < primes.size()-1; i++) {
// if 前一个素数+2 == 后一个素数
if (primes.get(i)+2 == primes.get(i+1)) result++;
}
System.out.print(result);
}
public static boolean isPrim(int num) {
for (int j = 2; j <= Math.sqrt(num); j++) {
if (num % j == 0) return false;
}
return true;
}
}