我是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; }
}
}
这是怎么回事?它实际上给出了不正确的输出吗?还是其他?
答案 0 :(得分:0)
在竞争性编程中,输出必须精确。 对于示例测试用例,请考虑您的输出之间的差异:
2
3
5
7
3
5
和预期的输出:
2
3
5
7
3
5