当前位置: 首页 > 知识库问答 >
问题:

打印出小于给定数字N的素数

充栋
2023-03-14

打印出小于给定数N的素数。对于奖励积分,您的解决方案应该在N*log(N)时间或更好的时间内运行。你可以假设N总是一个正整数。

输入样本:

程序应该接受文件名的路径作为其第一个参数。该文件中的每一行都是一个测试用例。每个测试用例将包含一个整数n

例如。

10
20
100

输出样本:

对于每一行输入,按升序打印出小于N的素数,逗号分隔。(逗号和数字之间不能有空格)

2,3,5,7

2,3,5,7,11,13,17,19

2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97

以下是我的解决方案:

public class problem1 {

    public static void main(String [] args) throws Exception
    {
        File f=new File("C://Users/Rahul/Documents/Projects/r.txt");
        FileReader fr=new FileReader(f);

        List<Integer> l=new ArrayList<>();
        int p;
        BufferedReader br = new BufferedReader(fr);
        String s;

        while( (s= br.readLine()) != null ) {

                   int a=Integer.parseInt(s);

                   for(int i=2;i<a;i++)
                   {
                       p=0;
                        for(int j=2;j<i;j++)
                        {
                             if(i%j==0)
                            p=1;
                       }
                   if(p==0)
                      l.add(i);
                   }
                   String st=l.toString();
                   st=st.replaceAll("\\[", "").replaceAll("\\]", "").replace(", ", ",");
                   System.out.print(st);
                   System.out.println("\t");
        }

        fr.close();
    }
}

我的输入是:

10
50

输出为:

2,3,5,7
2,3,5,7,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47

但当我提交这个解决方案时,他们并不接受这个解决方案。

但是当我把这样的内容放在文档中时:

10 50
30

我试图让java程序忽略这个50。怎么做?

还有更好的解决方案吗?给我一些想法!


共有2个答案

长孙鸿振
2023-03-14

“您的程序应接受文件名路径作为其第一个参数”

您的解决方案中有一个硬编码的文件名,请改用args[0]

另外,您的解决方案看起来还可以,尽管在效率方面还有一些改进的空间。

赵炯
2023-03-14

要忽略文件中的额外数字,您只能获取每行的第一个数字。

您的解决方案可能不被接受,因为您在第二行中打印了两次2,3,5,7(即前一行的素数)

请参见下面的示例以解决这两个问题

while( (s= br.readLine()) != null ) {
    String [] numbers = s.split(" ");     // split the line 
    int a = Integer.parseInt(numbers[0]); // take only the first one
    ....

    System.out.print(st);
    System.out.println("\t");
    l.clear();  // clear the list before trying to find primes for the new line
}
 类似资料:
  • 我正在处理的任务是基于Author类创建一个arraylist,它的属性是:ID、Author's name、book和Nationity。除此之外,我不得不创建另一个类,它接收ID作为参数,并返回相应的作者信息。我的问题是,代码是我写的,但无论我的输入接收到什么ID,它总是检索到同一个作者的信息。有人能帮我吗? author.java getAuthor.java(用于根据ID检索作者信息的类)

  • 我的问题很简单,但我不知道如何解决我想要的。我必须找到小于给定数字的最大数素数,如果不存在则打印消息。 代码是有效的,如果数字是10,它会打印7,但我想做2个新的修改,我找不到解决方案。例如,如果给定的数字是1,我的程序应该如何修改以打印消息?我试着写一个if-else,但是如果我用if修改了while,这将不会有帮助。第二件事,如果给定的数是素数,代码仍然会找到比给定数少的数。如果我给数字7,输

  • 如何编写一个递归回溯函数,在该函数中,它打印所有的N位数字,使数字中每3个连续数字的总和正好等于S,其中N小于或等于10,并且是从0到27。 代码: 示例输出: 我很困惑如何递归地写这个。

  • 给定一个由n个整数组成的数组nums和一个目标,求出满足nums[i]+nums[j]+nums[k] 例如,给定nums=[-2,0,1,3],target=2。 返回2。因为有两个和小于2的三胞胎:

  • 我试着写一个代码,它接受一个介于1和1_000_000之间的整数,并返回一个比相同数字的整数大的最小整数,如果它不存在,则打印0。 举个例子 输入:156 输出165 输入330 输出0 输入27711 输出71127 我的问题是,下面的代码没有为其他输入返回正确的输出。 例如,在输入4231中,输出应该是4312。 我很难找到为每个输入返回正确输出的最佳算法。 TNX提前 }