gpt4 book ai didi

java - 数字是素数 - SPOJ - 错误 "runtime error (NZEC)"

转载 作者:行者123 更新时间:2023-12-01 09:41:45 25 4
gpt4 key购买 nike

我正在为 SPOJ.com 任务编写程序,该程序应该识别素数。不幸的是,这个 SPOJ 任务是波兰语的,因此我将尝试翻译输入和输出期望:

输入:n - 测试次数 n <100000,在接下来的行中,n 个数字来自区间 [1..10000]

输出:对于单词“YES”的每个数字,如果这个数字是质数。字:“不”,否则。

示例:

Input:
3
11
1
4

Output:
YES
YES
NO

我编写了以下代码,在测试期间工作得很好。不幸的是,当我尝试在 SPOJ 网页上提交此代码时,它不断返回错误“运行时错误(NZEC)”有人可以建议我如何改进它吗?

    Scanner in = new Scanner(System.in);
int n = in.nextInt();

if(1<=n&& n<=100000){
for(int i = 0; i<n+1; i++){
int v = in.nextInt();
if(1<=v&&v<=10000){
if(isPrime(v) == true){
System.out.println("YES");
}
if(isPrime(v) == false){
System.out.println("NO");
}
}
}
}
}
private static boolean isPrime(int v) {
if (v < 2) return true;
if (v == 2) return true;
if (v % 2 == 0) return false;
for (int i = 3; i * i <= v; i += 2)
if (v % i == 0) return false;
return true;

}

最佳答案

你学过素数的筛分法吗?
Check here您会找到更好的解决方案。

public class PrimeSieve {
public static void main(String[] args) {
int n = Integer.parseInt(args[0]);

// initially assume all integers are prime
boolean[] isPrime = new boolean[n+1];
for (int i = 2; i <= n; i++) {
isPrime[i] = true;
}

// mark non-primes <= n using Sieve of Eratosthenes
for (int factor = 2; factor*factor <= n; factor++) {

// if factor is prime, then mark multiples of factor as nonprime
// suffices to consider mutiples factor, factor+1, ..., n/factor
if (isPrime[factor]) {
for (int j = factor; factor*j <= n; j++) {
isPrime[factor*j] = false;
}
}
}

// count primes
int primes = 0;
for (int i = 2; i <= n; i++) {
if (isPrime[n]) primes++;
}
System.out.println("The number of primes <= " + n + " is " + primes);
}
}

关于java - 数字是素数 - SPOJ - 错误 "runtime error (NZEC)",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38397509/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com