1013

本文探讨了两种生成并打印素数的Java程序实现。第一种实现使用ArrayList存储素数,但存在运行超时的问题。第二种实现使用固定大小的数组存储素数,解决了超时问题,但测试点出现错误,疑似取值范围设定不当。文章提供了完整的代码示例,旨在优化素数生成和打印的效率。
import java.util.ArrayList;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
    // 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 51
        Scanner sc=new Scanner(System.in);
        int M=sc.nextInt();
        int N=sc.nextInt();
        boolean b;
        ArrayList<Integer> list=new ArrayList<Integer>();
        list.add(2);
        bgm:for (int num=3;;num++){
            for (int i=2;i<num;i++){
                if(num%i==0){
                    break;
                }
                else if(i==num-1){
                    list.add(num);
                }
            if (list.size()==N){
                break bgm;
            }
            }
        }
        for (int i=M-1;i<N;i++){
            int count=(N-M+1)/10;
            if (count==0){
                if (i==N-1){
                    System.out.print(list.get(i));
                }else{
                    System.out.print(list.get(i)+" ");
                }
            }else{
                if (i==N-1){
                    System.out.print(list.get(i));
                }else{
                    for (int j=0;j<count;j++){
                        if ((i-M+2)%10==0&&i!=M){
                            System.out.println(list.get(i));
                            break;
                        }else{
                            System.out.print(list.get(i)+" ");
                            break;
                        }

                    }

                }
            }


        }
    }
}

运行超时,扣2分

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int M=sc.nextInt();
        int N=sc.nextInt();
        int[] list=new int[1000];
        list[0]=2;
        list[1]=3;
        int x=1;
        for (int num=3;num<11000;num++){
            for (int i=2;i<num;i++){
                if (num%i==0){
                    break;
                }
                if(i==num-1){
                   x++;
                }
                if (x<1000){
                    list[x]=num;
                }

            }
        }

        for (int i=M-1;i<N;i++){
            int count=(N-M+1)/10;
            if (count==0){
                if (i==N-1){
                    System.out.print(list[i]);
                }else{
                    System.out.print(list[i]+" ");
                }
            }else{
                if (i==N-1){
                    System.out.print(list[i]);
                }else{
                    for (int j=0;j<count;j++){
                        if ((i-M+2)%10==0&&i!=M){
                            System.out.println(list[i]);
                            break;
                        }else{
                            System.out.print(list[i]+" ");
                            break;
                        }

                    }

                }
            }


        }
    }
}

测试点错误,扣1分,应该是取值范围有问题

转载于:https://www.cnblogs.com/zhuzehua/p/9724677.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值