Java 8 flux pour trouver le nombre de facteurs
Je suis coincé dans le problème ci-dessous pour trouver le nombre de facteurs d'un nombre donné en utilisant Java 8-streams.Lors de la soumission de la solution dans codechef , l'une des sous-tâches a été acceptée, mais toutes les autres ont jeté un NZEC et la solution n'a pas été acceptée. J'ai essayé d'envelopper le code dans le bloc try/catch mais j'obtiens toujours NZEC comme sortie.
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);
}
}
}
Je suis vraiment nouveau dans le codage concurrentiel et incapable de comprendre le problème avec le code ci-dessus.S'il vous plaît aider....
1 answers
Certaines choses qui pourraient causer des problèmes:
L'utilisation de
int
pourproduct
peut déborder (dépasserInteger.MAX_VALUE
), en particulier avec la multiplication. Cela peut entraîner une valeur négative pourproduct
vous donnantIllegalArgumentException
pour unlimit()
négatif. Vous devez passer àlong
Limite doit être
Math.ceil(sqrt(product))
Vous ne devez pas multiplier à, il est beaucoup plus rapide de calculer les facteurs pour le
currentValue
séparé et de joindre le résultat.