2011-12-30 50 views
2

好吧,所以說我想找到一個數字a的因素。我知道如何做到這一點,使用for循環和arraylist。我的問題是(我不知道如何去做這件事)我想要這些因素是成對的(它們相乘得到原始數字)我會假設我可以得到多個數組列表中的因子,每個數列有兩個變量。但由於不同的數字會有不同數量的因素,這是非常難以處理的。 (更不用說,我不知道如何做到這一點..)我會如何使用多個數組列表來篩選數字的因子?

在此之後,我想在一個方程中測試這些變量以縮小它們。比方說,無論哪一對加起來都是我想要使用的數字。我一直在試圖弄清楚如何使用教程去了解所有這些,但我完全失去了,因爲我對Java有點新鮮。

謝謝你的任何和所有幫助:-)

+0

目前還不清楚究竟是什麼你不知道該怎麼辦:該F2 S可利用平凡重新計算。你能發佈迄今爲止的代碼嗎? – Taymon 2011-12-30 03:42:11

+0

所以你要找兩個乘數到'a'並加起來到'b'的數字;我理解正確嗎?如果是這樣的話,是否有必要遍歷'a'的所有因素?另一種方法可能就是將這些數字表示爲二次方程的根,並應用二次方程式。這應該採取一兩行代碼,沒有任何迭代。如果您認爲這是您嘗試做的有效方法,那麼再次發佈,我會提供更全面的答案。 – 2011-12-30 03:47:58

回答

3

你可以創建自己的類,它曾經爲對每邊田,但它是可以接受的,方便使用Map<Integer, Integer>。一個基本的實現是:

private static Map<Integer, Integer> factorize(int number) { 
    Map<Integer, Integer> factors = new HashMap<Integer, Integer>(); 
    for (int i = 1; i < Math.sqrt(number); i++) { 
     if (number % i == 0) 
      factors.put(i, number/i); 
    } 
    return factors; 
} 

下面是一些測試代碼,以顯示它如何會被稱爲什麼結果是:

public static void main(String[] args) { 
    Map<Integer, Integer> factorPairs = factorize(12345); 
    for (Map.Entry<Integer, Integer> factor : factorPairs.entrySet()) 
     System.out.println(factor.getKey() + " x " + factor.getValue()); 
} 

輸出:

1 x 12345 
3 x 4115 
5 x 2469 
15 x 823 

這應該是足夠讓你開始吧

+0

我現在就試試看......謝謝! – Wilson 2011-12-30 03:44:17

+0

+1擊敗我。 – Paulpro 2011-12-30 03:46:02

+0

應該不factorPairs.entrySet()是factors.entrySet()? – 2011-12-30 03:57:16

0

假設你想要一個數字x的因子:

設y =√x

然後從1循環到y找到因子。

說你有我就寫Javaish僞因爲我不記得的Java很好人數218:

int x = 218; 
int y = Math.sqrt(218); // 14 
for(int i = 1; i <= y; i++){ 
    if i is a factor of x 
    Add it to the list 
} 
// Your list will now be: 1, 2 

的因素是對與每個元素你的名單只是x除以該元素。

所以1配對的因素是一分之二百十八= 218,和2配對的因素是二分之二百十八= 109

0

使用整數列表的列表,請嘗試是這樣的:

import java.util.*; 
public class Main { 
    static List<Integer> findListThatSumsTo10(List<List<Integer>> list) { 
     for (List<Integer> l : list) { 
      int sum = 0; 
      for (Integer i : l) 
       sum += i; 
      if (sum == 10) return l; 
     } 
     return null; 
    } 
    public static void main(String[] args) { 
     List<List<Integer>> list = new LinkedList<List<Integer>>(); 
     Integer[] factorsOf15 = { 3, 5 }; 
     Integer[] factorsOf30 = { 2, 3, 5 }; 
     list.add(Arrays.asList(factorsOf15)); 
     list.add(Arrays.asList(factorsOf30)); 
     System.out.println(list); 
     System.out.println(findListThatSumsTo10(list)); 
    } 
} 
0

您不需要存儲配對。

可以說N是你的原始號碼,而F1F2是一對因素;即N = F1 x F2

鑑於N是已知的,您只需要存儲F1 s。

int f2 = n/f1;