PAT乙级:1007. 素数对猜想 (Java)
2016-08-09 07:13
351 查看
本题不难,重在理解题意中N的含义。此处N的意思为最大的素数不超过N。我们最平常的思路如下:先将所有的小于N的素数算出,再找相邻差为2的:
import java.util.ArrayList; import java.util.List; import java.util.ListIterator; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner s=new Scanner(System.in); int N=0; N=s.nextInt(); //求素数,并添加到Arraylist之中 List<Integer> list_int=new ArrayList<Integer>(); for (int i = 1; i <= N; i++) { boolean is_prime=true; for (int j = 2; j <= Math.sqrt(i); j++) { if (i%j==0) { is_prime=false; } } if (is_prime) { list_int.add(i); } } //输出 ListIterator<Integer> lit=list_int.listIterator(); int left=lit.next(); int right=0; int count=0; while (lit.hasNext()) { right=lit.next(); if (right-left==2) { count++; } left=right; } System.out.println(count); } }
当然,我们发现此题目有一个特点:不断比较相邻的素数相差是否为 2 。比较相邻几项的题目一般都可以用几个变量来搞定而不用数组,但会增加一点时间上的开销。
import java.util.ArrayList; import java.util.List; import java.util.ListIterator; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner s=new Scanner(System.in); int N=0; N=s.nextInt(); int left=-1;//相邻两个数左边的数 int right=-1;//相邻两个数右边的数 int count=0;//记录所有满足条件的次数 for (int i = 2; i <= N; i++) { boolean is_prime=true; for (int j = 2; j <= Math.sqrt(i); j++) { if (i%j==0) { is_prime=false; } } if (is_prime) {//如果这个数是素数 if (left==-1) {//当左面比较的数还没有时,初始化左面的数 left=i; }else if (right==-1) {//当右面的数为空时 right=i; if (right-left==2) {//比较相差是否为2 count++; }else{ } //无论是否符合相差为2,都将右部置空 left=right; right=-1; } } } System.out.println(count); } }
相关文章推荐
- PAT 乙级 1007. 素数对猜想 (20) Java版
- PAT 乙级1007. 素数对猜想 (JAVA版)
- Java - PAT - 1007. 素数对猜想 (20)
- PAT-乙级-1007. 素数对猜想 (20)
- PAT乙级 1007. 素数对猜想 (20)
- PAT 乙级练习题1007. 素数对猜想 (20)
- PAT 乙级 1007. 素数对猜想 (20)
- PAT乙级 1007. 素数对猜想
- PAT乙级 1007. 素数对猜想 (20)
- 1007. 素数对猜想 (20)-PAT乙级
- PAT 乙级 1007. 素数对猜想 (20)
- 1007. 素数对猜想 (20)-PAT乙级真题
- 浙江大学PAT_乙级_1007. 素数对猜想 (20)
- PAT乙级1007. 素数对猜想 (20)
- PAT 乙级 1007. 素数对猜想 (20)
- PAT-乙级-1007. 素数对猜想 (20)
- PAT乙级 1007. 素数对猜想 (20)
- PAT 1007. 素数对猜想 (20);判断一个数为素数;java实现
- PAT乙级 1007. 素数对猜想
- [PAT乙级]1007. 素数对猜想 (20)