题目如下:
本题要求统计给定整数M和N区间内素数的个数并对它们求和。
输入格式:
输入在一行中给出两个正整数M和N(1≤M≤N≤500)。
输出格式:
在一行中顺序输出M和N区间内素数的个数以及它们的和,数字间以空格分隔。
———————————————————————————————————————————以下为我的解题思路:
首先,我们要确定M到N区间的某个整数I是否是素数,我们通过素数的概念可知,一个数除了1和它本身外没有其他因数则为素数,因此我们将写一个for循环,将I与2到I-1的整数取余,若余数为0,则跳过,若结束时余数均不为0,则加入统计的素数和,累计素数个数。外面再写一个for循环,遍历M到N之间的所有整数,判断他们是否为素数,具体的代码实现如下:
import java.util.*;
public class Main {
public static void main(String[] args) {
int i,N,M,count=0,sum=0;
boolean Flag=true;
double X;
Scanner reader=new Scanner(System.in);
N= reader.nextInt();M=reader.nextInt();
if(N==M){
for(i=2;i<=Math.sqrt(N);i++){
int x=(int)N;
if(x>2&&x%i==0){
Flag=false;
break;
}else if(x==2){
break;
}else if(x==1){
Flag=false;
break;
}
}
if(Flag){
count++;
sum=(int)N;
}
}
else{
for(X=N;X<=M;X++){
for(i=2;i<=Math.sqrt(X);i++){
int x=(int)X;
if(x>2&&x%i==0){
Flag=false;
break;
}else if(x==2){
break;
}else if(x==1){
Flag=false;
break;
}
}
if(Flag){
count++;
sum=(int)X+sum;
}
Flag=true;
}
}
System.out.println(count+" "+sum);
}
}
PTA评分如下:
debug后发现,当整数为1或0时,无法获得正确答案,将整数为1或0与是否为素数一同写入素数的计数的条件判断内后,代码如下:
import java.util.*;
public class Main {
public static void main(String[] args) {
int i,N,M,count=0,sum=0;
boolean Flag=true;
double X;
Scanner reader=new Scanner(System.in);
N= reader.nextInt();M=reader.nextInt();
if(N==M){
for(i=2;i<=Math.sqrt(N);i++){
int x=(int)N;
if(x>2&&x%i==0){
Flag=false;
break;
}else if(x==2){
break;
}
}
if(Flag&&N!=1){
count++;
sum=(int)N;
}
}
else{
for(X=N;X<=M;X++){
for(i=2;i<=Math.sqrt(X);i++){
int x=(int)X;
if(x>2&&x%i==0){
Flag=false;
break;
}else if(x==2){
break;
}else if(x==1){
Flag=false;
break;
}
}
if(Flag&&X!=1){
count++;
sum=(int)X+sum;
}
Flag=true;
}
}
System.out.println(count+" "+sum);
}
}
特别需要注意的是,1不是素数,2是素数,这两个要单独列举出来
以下为PTA评分结果:
总结:
统计素数的时候要注意整数0,1和2这几个整数