【发布时间】:2014-07-03 15:00:36
【问题描述】:
这是我的素数生成代码:
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class prime_gen
{
public static void gen_prime(long min,long max)
{
long n=max/2,i=0,j=0;
boolean[] prime = new boolean[(int) max];
if(min==1)
{
System.out.println("2");
System.out.println("3");
}
else
if(min==3)
System.out.println("3");
else
if(min==2)
{
System.out.println("2");
System.out.println("3");
}
for (i = 1; i < n; i++)
for (j = i; j <= (n - i) / (2 * i + 1); j++)
prime[(int) (i + j + 2 * i * j)] = true;
for (i = 2; i < prime.length/2; i++)
{
if (!prime[(int)i])
{
if(2*i+1>min)
System.out.println((2*i+1)+" ");
}
}
}
public static void main(String args[])
{
try
{
int i=0,T=0;
long[] min,max;
String[] s1=new String[2];
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String s=br.readLine();
T=Integer.parseInt(s);
min=new long[T];
max=new long[T];
for(i=0;i<T;i++)
{
s1=br.readLine().split(" ");
min[i]=Integer.parseInt(s1[0]);
max[i]=Integer.parseInt(s1[1]);
}
for(i=0;i<T;i++)
{
gen_prime(min[i],max[i]);
System.out.println();
}
}catch(Exception e)
{
return;
} }
}
约束是:
T<=10
max<=1000000000
max-min<=100000
我使用 sundaram 的筛子生成素数,代码在我的测试用例中运行良好。我还使用 try catch 块来处理异常。我不知道这段代码有什么问题。spoj 论坛说每当 JVM 产生异常时,都会抛出 NZEC 错误。
【问题讨论】: