我陷入了以下问题,使用Java 8流找到给定数量的因子数量。虽然在codechef中提交解决方案,但其中一个子任务被接受,但其他所有子任务都抛出了NZEC,而解决方案却没有公认。 我尝试将代码包装在try / catch块中,但仍然得到NZEC作为输出。
import java.util.Scanner;
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int testCases = scanner.nextInt();
while (--testCases >= 0) {
int nValue = scanner.nextInt();
int product = 1;
while (nValue-- != 0) {
int currentVal = scanner.nextInt();
product *= currentVal;
}
int prod = product;
System.out.println(Stream.iterate(2, x -> x + 1).limit(prod / 2).filter(num -> prod % num == 0).count() + 2);
}
}
}
我对竞争性编码真的很陌生,无法找出上述代码的问题。请帮忙...。
答案 0 :(得分:0)
一些可能引起问题的东西
为int
使用product
可能会溢出(超过Integer.MAX_VALUE
),尤其是在乘法运算中。这可能会导致product
的值为负,而给您IllegalArgumentException
为负的limit()
。您应该切换到long
限制应为Math.ceil(sqrt(product))
您不应乘以,计算单独的currentValue
的因数并将结果相加会更快。