我试图找到从最小数到最大数的范围内的主要因子。因此,假设我有最小值:7和最大值:10。我将需要找到从7到10的素数。我能够找到单个数字的素数,如10或12,但我似乎无法做到这一点范围是7-10。这是我写的:

 public static void primeFactors(int min, int max){
        for(int i = 2; i <= max; i++){
                while(min <= max && i % 2 == 0){
                    min = min / 2;

                }
                System.out.println("Factor: " + i);
            }
        }
    }

最佳答案

如果您希望在单个循环中执行此操作,则需要跟踪输入的所有数字,例如通过使用数组:

public static void main(String[] args) {
        // range [7, 10]
        int[] inputs = IntStream.range(7, 11).toArray();
        System.out.println(factorize(inputs));
    }

    private static Set<Integer> factorize(final int[] input) {
        // no prime factors bigger than half the largest number
        final int limit = input[input.length - 1] / 2;
        final Set<Integer> factors = new HashSet<>();

        for (int f = 2; f <= limit; f++) {
            // even numbers are not primes
            if (((f % 2) == 0) && (f > 2)) continue;
            for (int i = 0; i < input.length; i++) {
                while (input[i] % f == 0) {
                    input[i] /= f;
                    factors.add(f);
                }
            }
        }
        return factors;
    }


输出:

[2, 3, 5]


但是,如果您有一种计算数字素数的方法,则调用该方法可能会更简单:

IntStream.range(7, 11).forEach(i -> factorizeSingleNumber(i));

关于java - 查找范围从最小到最大的主要因子,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60323599/

10-16 07:30