我的代码对spoj的PRIME1问题给出了错误的答案;我如何解决它?

时间:2019-04-02 17:09:07

标签: java primes

我是Java的新手,并且是竞争编码的绝对入门者。有人告诉我尝试在spoj解决问题以获得感觉,PRIME1是我决定尝试的第一个。在了解了有关eratosthenes筛子并尝试制作一个工作程序之后,我在eclipse上获得了预期的结果,并且idone也接受了它,但是spoj说它给出了错误的答案

问题陈述: https://www.spoj.com/problems/PRIME1/

自从我还是一个初学者以来,我遇到了许多不同的错误,并根据遇到的各种论坛的建议修复了这些错误,从在readLine上拆分到尝试捕获。我没有完全掌握所有这些解决方案,也不知道它们是否导致错误的答案错误。我尝试在eclipse上多次运行它,并验证素数列表中的结果,甚至验证它是否运行了我的代码,并说它是成功的,尽管我不知道它的正确性,原因是我将网站用于第一次感谢spoj。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


class Eratosthenes {
    public static void main(String[] args)throws IOException{

        try{
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            int n=Integer.parseInt(br.readLine());

            while(n-->0) {
                String[] inputs = br.readLine().split(" ");

                                //finding the limits

                int o=Integer.parseInt(inputs[0]);
                int p=Integer.parseInt(inputs[1]);


                int b=(int)Math.sqrt(p);

                int[] prime=new int[p+1];

                                //assigning all values prime at first


                for(int i=0;i<=p;i++) {
                    prime [i]=1;
                }

                                //removing 0 and 1
                prime[0]=0;
                prime[1]=0;

                                //using the sieve to remove all composite multiples of primes

                for(int i=2;i<=b;i++) {
                    if(prime[i]==1) {
                        for(int j=i*2;j<=p;j+=i) {
                            prime[j]=0;
                        }
                    }
                }


                                //printing the primes
                for(int i=0;i<prime.length;i++) {
                    if(prime[i]==1) {
                        if(i>=o)
                        System.out.println(i);
                    }
                }
            }
        }catch(Throwable trh) { return; }


    }
}

这是怎么回事?它实际上给出了不正确的输出吗?还是其他?

1 个答案:

答案 0 :(得分:0)

在竞争性编程中,输出必须精确。 对于示例测试用例,请考虑您的输出之间的差异:

2
3
5
7
3
5

和预期的输出:

2
3
5
7

3
5