2017-05-20 4 views

答えて

2

2つの問題があります。最初にフィルタが適用され、2番目に制限が値の数であり、自己の値ではありません。

数値の制限を生成するのに時間がかかるため、非常に長いループです(無限ループはありません)。例えば5の場合は、2つの数値((long)Math.sqrt(5))== 2Lを取得しようとしますが、number == xの場合は最初の解決策を達成しますが、オーバーフローする前に40億の値を確認してから-number限界に達する。すなわち5%5 == 0と5%〜5 == 0

簡単な解決策は、フィルタがとにかく妨げる値の数ではなく、値の限界、

private static boolean isCompositeLambda(int number) { 
    return number > 3 && 
      IntStream.rangeClosed(2, (int) Math.sqrt(number)) 
        .anyMatch(x -> number % x == 0); 
} 
関連する問題