我试图找到从最小数到最大数的范围内的主要因子。因此,假设我有最小值: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/