我有一個計算給定數字範圍的素數因子的算法。 例如在10和20之間。使用嵌套數組顯示素數因子或其他操作的數量
結果是:數字10:因素是:2,5.數字11:因素是:11.數字12:因素是:2,6等等......。
但是我想查看哪些數字只有2或3或4或更多的素因子。
這些數字我存儲在一個數組中。我的想法是將這些單獨的素數因子分配給一個給定的數字。所以我應該有一個arraylist可能,這是動態變化(作爲大小的名稱也)。
例如:
ArrayOfNumbers [0] = 10;
ArrayOfPrimeFactorsOf Number [0] = 2; ArrayOfPrimeFactorsOf Number [1] = 5;ArrayOfNumbers [1] = 11; ArrayOfPrimeFactorsOf Number [0] = 11;
我可以比較其數目具有例如2或3的素因子=>通過獲得的素因子(ArrayOfPrimeFactorsOf..Number)屬於一個數字陣列(ArrayOfNumbers)的陣列的大小和顯示這些數目也是其主要因素。
我的問題是:我怎樣才能使這個嵌套數組(ArrayOfPrimeFactorsOf..Number)並將其分配給ArrayOfNumbers [..]?
也許你有任何其他的想法如何解決這個挑戰?
下面的程序:
public static void countPrimeFactors() {
int min = 10; // min number in array
int max = 20; // max number in array
Integer[] arrayOfNumbers = new Integer[100000];
for (int a = 0; a < arrayOfNumbers.length; a++) {
for (int k = min; k <= max; k++) {
arrayOfNumbers[a] = k;
System.out.print(arrayOfNumbers[a] + ": ");
if (arrayOfNumbers[a] % 2 == 0) {
System.out.print(2 + " ");
arrayOfNumbers[a] /= 2;
}
// n must be odd at this point. So we can
// skip one element (i = i +2)
// i is a current factor
// array[a] is a current number
for (int i = 3; i <= Math.sqrt(arrayOfNumbers[a]); i += 2) {
// While i divides n, print i and divide n
if (arrayOfNumbers[a] % i == 0) {
System.out.print(i + " ");
arrayOfNumbers[a] /= i;
}
}
// This condition is to handle the case when
// n is a prime number greater than 2
if (arrayOfNumbers[a] > 2)
System.out.print(arrayOfNumbers[a] + " , ");
}
break;
}
System.out.print("Length of array[a]: " + arrayOfNumbers.length);
}
謝謝您的答覆。它向我展示了具體數字的所有可能因素。但是我怎麼能在Map中迭代這些因素呢?例如:編號12:[2,3,4,6,12]。我想在這個Map中迭代來檢查是否有兩個因素可以創建這個數字(12)。 – gryzek
您正在通過值獲取Map的元素,因此numbers.get(someNumber)會爲您提供Set中包含該數字的因素,您使用迭代器遍歷集合,如果您不熟悉它,則可能會更容易使用'array'或'ArrayList',將在幾分鐘內添加代碼。 – FilipRistic
謝謝。它幫助我更多:) – gryzek