【问题标题】:runtime error (NZEC) Java SPOJ运行时错误 (NZEC) Java SPOJ
【发布时间】:2014-03-04 00:58:50
【问题描述】:

我正在尝试解决称为 Prime 生成器的 SPOJ 问题。虽然输出可以在我的计算机上运行,​​但当我尝试在 SPOJ 上运行它时它不起作用。出现以下错误消息。

错误:运行时错误 (NZEC)

你能帮我找出它是什么吗?

import java.util.BitSet;
import java.util.Scanner;


class Prime_generator {


public static void main(String[] args) {
    Scanner input=new Scanner(System.in);

    int number_of_entries=input.nextInt();
    int [] entries=new int[number_of_entries*2];

    for(int i=0;i<number_of_entries*2;i++){
        entries[i]=input.nextInt();
    }


    BitSet bits=new BitSet(1000000002);

    bits.set(0, 1000000000);
    bits.set(0,false);
    bits.set(1,false);
    for(int i=2;i<=Math.sqrt(1000000001);i++){

        if(bits.get(i)){

            for(int j=2;j*i<=100000000;j++){

            bits.set(j*i, false);

                }
        }

    }   

    int i=0;

    int starting_index=0;
    int ending_index=0;

    int array_index=0;
    while(i<number_of_entries){

        starting_index=entries[array_index];
        ending_index=entries[array_index+1];
        array_index+=2;
        for(int k=starting_index;k<=ending_index;k++){
            if(bits.get(k)){

                System.out.println(k);
            }

        }
        System.out.println();
        i++;
    }


    System.exit(0);


}

}

【问题讨论】:

  • 可能运行时间过长,导致计时器到期,因此您的代码不会返回 0。
  • 在规定时间内运行
  • @user35265 你不能分配像 10^9 这样的大数字 ..
  • 你指的是哪一部分?

标签: java runtime-error sieve-of-eratosthenes


【解决方案1】:

必须注意的几点:

  • 您必须使用快速 I/O,即 BufferedReaderBufferedWriter 类,而不是 Scanner(查看 this blog post)。
  • 在读取输入之前对素数进行预处理(否则您将多次预先计算完整的解)。
  • 在退出 main 方法之前不要忘记关闭输入流。这样可以避免 资源泄漏 警告。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多