Java8流来查找因子的数量

Java8流来查找因子的数量,java,java-8,runtime-error,Java,Java 8,Runtime Error,我陷入了下面的问题,无法使用Java 8-streams找到给定数字的因子数。在以codechef提交解决方案时,其中一个子任务被接受,但所有其他子任务都抛出了一个NZEC,而该解决方案未被接受。 我尝试将代码包装在try/catch块中,但仍然将NZEC作为输出 import java.util.Scanner; import java.util.stream.Stream; public class Main { public static void main(String[] a

我陷入了下面的问题,无法使用Java 8-streams找到给定数字的因子数。在以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);
        }
    }
}

我对竞争性编码非常陌生,无法解决上述代码的问题。请帮助……

一些可能导致问题的事情:

  • 产品
    使用
    int
    可能会溢出(超过
    整数.MAX_值
    ),尤其是在相乘时。这可能会导致
    产品的值为负值,从而为负
    限制()
    提供
    IllegalArgumentException
    。您应该切换到
    long

  • 限额应为
    Math.ceil(sqrt(产品))

  • 您不应该在进行乘法运算,计算单独的
    currentValue
    的因子并合并结果要快得多


我想你最好在这里谈谈