簡體   English   中英

使用嵌套數組來顯示和計算素數因子或其他操作的數量

[英]Using nested arrays to show and count number of prime factors or other operations

我有一個算法,它計算給定數字范圍的素因子。 例如10到20之間。

結果是:數字10:因素是:2,5。數字11:因素是:11。數字12:因素是:2,6等。...

我想檢查哪些數字只有2或3個或4個或更多的素因子。

我存儲在數組中的那些數字。 我的想法是將這些個別素數因子分配給給定的數字。 所以我應該有一個arraylist,它正在動態變化(也就像大小一樣)。

例如:

ArrayOfNumbers [0] = 10;
ArrayOfPrimeFactorsOf 10 Number [0] = 2; ArrayOfPrimeFactorsOf 10 Number [1] = 5;

ArrayOfNumbers [1] = 11; ArrayOfPrimeFactorsOf 11 Number [0] = 11;

我可以通過獲取屬於多個數組(ArrayOfNumbers)的素因子數組(ArrayOfPrimeFactorsOf..Number)的大小來比較哪個數字具有例如2或3個素數因子=>並且還顯示該數字及其素因子。

我的問題是:我怎么能把它作為嵌套數組(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);
}

我認為使用地圖將是最好的解決方案,特別是TreeMap,key應該是您要查找因子的數字,而值應該是包含所有factros的其他集合。 例:

    Map<Integer, Set<Integer>> numbers = new TreeMap<>();
            int min = 10;
    int max = 20;
    Map<Integer, Set<Integer>> numbers = new TreeMap<>();
    for (int i = min; i <= max; i++) {
        Set<Integer> factors = new TreeSet<>();
        for (int j = 2; j <= i/2; j++) {
            if (i % j == 0) {
                factors.add(j);
            }
        }
        //factors.add(i);
        numbers.put(i, factors);

    }
    System.out.println(numbers.get(11).size());
    System.out.println(numbers.values());

這是一般的想法,您可以通過numbers.get(someNumber).size();輕松獲得每個數字的因子數量numbers.get(someNumber).size();

如果取消注釋factors.add(i); 如果你需要這樣的話,那么我們找到因素的數字也將被計算在內。

迭代

  // Iterator mapIt = numbers.keySet().iterator(); - you can only iterate thru map by using iterator

    for(int i = min; i <= max; i++){
        Iterator it = numbers.get(i).iterator();
        System.out.print("Iterating for number " + i+": ");
        while(it.hasNext()){
            System.out.print(it.next()+" ");
        }
        System.out.println();
    }

這應該給你一般的想法,如果你不喜歡使用迭代器,那么使用ArrayList而不是Set,比如Map<Integer, List<Integer>>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM