2

好的,所以说我想找到数字 a 的因数。我知道如何做到这一点,使用 for 循环和 arraylist。我的问题是(我不知道该怎么做)我想要成对的因子。(相乘得到原始数字)我假设我可以在多个数组列表中获得因子,每个数组列表都有 2 个变量。 . 但这非常笨拙,因为不同的数字将有不同数量的因子。(更不用说,我不知道该怎么做..)

在此之后,我想在一个方程中测试这些变量以缩小它们的范围。比如说,这些对中的任何一个加起来就是给定的数字,这就是我想要使用的那个。我一直试图弄清楚如何使用教程来完成所有这些工作,但我完全迷失了,因为我对 Java 有点陌生。

感谢您的任何帮助:-)

4

4 回答 4

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

这应该足以让你开始

于 2011-12-30T03:42:43.117 回答
0

假设您想要数字 x 的因数:

让 y = √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

于 2011-12-30T03:45:21.970 回答
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));
    }
}
于 2011-12-30T03:51:15.803 回答
0

您不需要存储对。

假设这N是您的原始数字,F1并且F2是一对因素;即N = F1 x F2

鉴于这N是已知的,您只需要存储F1s。F2可以使用以下方法轻松重新计算 s :

    int f2 = n / f1;
于 2011-12-30T04:14:46.520 回答