Java 8 потоков, чтобы найти ряд факторов - PullRequest
0 голосов
/ 25 августа 2018

Я застрял в приведенной ниже проблеме, чтобы найти число факторов данного числа, используя потоки 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);
        }
    }
}

Я действительно новичок в конкурентном кодировании и не могу выяснить проблему с вышеуказанным кодом. Пожалуйста, помогите....

1 Ответ

0 голосов
/ 25 августа 2018

Некоторые вещи, которые могут вызвать проблемы:

  • Использование int для product может привести к переполнению (превысит Integer.MAX_VALUE), особенно при умножении. Это может привести к отрицательному значению product, что даст вам IllegalArgumentException для отрицательного limit(). Вы должны переключиться на long

  • Предел должен быть Math.ceil(sqrt(product))

  • Не следует умножать на, гораздо быстрее вычислить коэффициенты для отдельного currentValue и объединить результат.

...