版权声明:本文为博主原创文章,转载请注明原博客地址 https://blog.csdn.net/qunqunstyle99/article/details/82889285
题目:数素数 (20 分)
令 Pi 表示第 i 个素数。现任给两个正整数 M≤N≤104,请输出 PM 到 PN 的所有素数。
输入格式:
输入在一行中给出 M 和 N,其间以空格分隔。
输出格式:
输出从 PM 到 PN 的所有素数,每 10 个数字占 1 行,其间以空格分隔,但行末不得有多余空格。
输入样例:
5 27
输出样例:
11 13 17 19 23 29 31 37 41 43
47 53 59 61 67 71 73 79 83 89
97 101 103
代码实现
一开始有一个情况没有考虑到,十九分
import java.util.Scanner;
public class Main {
public static void main(String []args){
Scanner in = new Scanner(System.in);
int head =in.nextInt();
int bottom =in.nextInt();
int temp[]=new int[1000];
int k=0;
int count=0;
//素数定义从2开始计算
for(int i=2;;i++){
if(isPrime_3(i)==1){
count++;
if(count>=head&&count<=bottom){
temp[k]=i;
k++;
}else if(count>bottom)
break;
}
}
int j=1;
for(int i=0;i<k;i++){
if(j!=10){
if (j!=1)
System.out.print(" ");
System.out.print(temp[i]);
j++;
}else {
System.out.println(" "+temp[i]);
j=1;
}
}
}
//判断是不是素数
static int isPrime_3(int num)
{
//两个较小数另外处理
if(num ==2|| num==3 )
return 1 ;
//不在6的倍数两侧的一定不是质数
if(num %6!= 1&&num %6!= 5)
return 0 ;
double tmp =Math.sqrt(num);
//在6的倍数两侧的也可能不是质数
for(int i= 5;i <=tmp; i+=6 )
if(num %i== 0||num %(i+ 2)==0 )
return 0 ;
//排除所有,剩余的是质数
return 1 ;
}
}
找了好久,调整输入数据的长度,当是10的时候,发现输出多空了一行
对比会发现退出标志前面多空了一行,问题定位到当最后一行是完整的10个数时,不能执行换行操作。
import java.util.Scanner;
public class Main {
public static void main(String []args){
Scanner in = new Scanner(System.in);
int head =in.nextInt();
int bottom =in.nextInt();
int temp[]=new int[1000];
int k=0;
int count=0;
//素数定义从2开始计算
for(int i=2;;i++){
if(isPrime_3(i)==1){
count++;
if(count>=head&&count<=bottom){
temp[k]=i;
k++;
}else if(count>bottom)
break;
}
}
int j=1;
for(int i=0;i<k;i++){
if(j!=10){
if (j!=1)
System.out.print(" ");
System.out.print(temp[i]);
j++;
//当收尾相遇时既不用换行
}else if(j==10&&bottom==head)
System.out.print(" "+temp[i]);
else {
System.out.println(" "+temp[i]);
j=1;
}
head++;
}
}
//判断是不是素数
static int isPrime_3(int num)
{
//两个较小数另外处理
if(num ==2|| num==3 )
return 1 ;
//不在6的倍数两侧的一定不是质数
if(num %6!= 1&&num %6!= 5)
return 0 ;
double tmp =Math.sqrt(num);
//在6的倍数两侧的也可能不是质数
for(int i= 5;i <=tmp; i+=6 )
if(num %i== 0||num %(i+ 2)==0 )
return 0 ;
//排除所有,剩余的是质数
return 1 ;
}
}
emmmmmmm,不过呢存在一个运行超时
的问题,我运行了三次,两次超时18分,一次AC
。提交不成功可以多提交两下试试。亲测对java没有那么友好。