1

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

输入样本:

你的程序应该接受一个文件名的路径作为它的第一个参数。该文件中的每一行都是一个测试用例。每个测试用例将包含一个整数n < 4,294,967,295

例如

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。怎么做?

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

4

2 回答 2

1

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

您的解决方案可能不被接受,因为在您的第二行中您已经打印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
}
于 2013-08-03T11:34:16.250 回答
0

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

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

否则,您的解决方案看起来不错,尽管在效率方面还有一些改进空间。

于 2013-08-03T12:06:49.277 回答