Как мне использовать несколько массивов для фильтрации множителей числа? - PullRequest
2 голосов
/ 30 декабря 2011

Хорошо, так сказать, я хочу найти факторы числа а. Я знаю, как это сделать, используя цикл for и arraylist. Моя проблема в том, что (и я понятия не имею, как это сделать), я хочу, чтобы факторы попарно (которые умножались вместе, чтобы получить исходное число), я бы предположил, что я мог бы получить факторы в нескольких массивах, каждый из которых имеет 2 переменные. ... но это крайне громоздко, так как разные числа будут иметь разное количество факторов. (Не говоря уже, я не знаю, как это сделать ..)

После этого я хочу проверить эти переменные в уравнении, чтобы сузить их. Скажем, какую из этих пар сложить с определенным числом, я хочу использовать. Я пытался понять, как все это сделать, используя учебные пособия, но я совершенно потерян, так как я немного новичок в Java.

Спасибо за любую помощь: -)

Ответы [ 4 ]

3 голосов
/ 30 декабря 2011

Вы можете создать свой собственный класс, в котором есть поля для каждой стороны пары, но было бы приемлемо и удобно использовать 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 голосов
/ 30 декабря 2011

Вам не нужно хранить пары.

Допустим, N - это ваше исходное число, а F1 и F2 - пара факторов; т.е. N = F1 x F2.

Учитывая, что N является известным, вам нужно только сохранить F1 s. F2 s можно пересчитать тривиально, используя:

    int f2 = n / f1;
0 голосов
/ 30 декабря 2011

попробуйте что-то вроде этого, используя список списков целых чисел:

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 голосов
/ 30 декабря 2011

Скажем, вы хотите, чтобы факторы числа х:

Пусть у = √x

Затем выполните цикл от 1 до y, чтобы найти факторы.

Пример

Скажем, у вас номер 218. Я просто напишу Javaish псевдокод, так как я не очень хорошо помню Java:

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/1 = 218, а коэффициент спаривания 2 равен 218/2 = 109

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...