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....

Author: Codershree, 2018-08-25

1 answers

Certaines choses qui pourraient causer des problèmes:

  • L'utilisation de int pour product peut déborder (dépasser Integer.MAX_VALUE), en particulier avec la multiplication. Cela peut entraîner une valeur négative pour product vous donnant IllegalArgumentException pour un limit() 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.

 0
Author: k5_, 2018-08-25 14:09:34