您的位置:首页 > 编程语言 > Java开发

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);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java