使用HashSet的唯一素因子

时间:2014-05-26 21:23:09

标签: java hashset

我写了一个递归找到素因子的方法。最初,该方法只是打印值。我目前正在尝试将它们添加到HashSet以找到唯一的素因子。

在我的每个原始打印语句中,我添加了primes.add()以便将该特定整数添加到我的集合中。

我的打印输出保持不变,例如,如果我输入整数24,我得到2*2*2*3。但是,只要我打印HashSet,输出就是[2]

    public static Set<Integer> primeFactors(int n)
    {
        Set<Integer> primes = new HashSet<Integer>();

        if(n <= 1)
        {
            System.out.print(n);
            primes.add(n);
        }
        else
        {
            for(int factor = 2; factor <= n; factor++)
            {
                if(n % factor == 0)
                {
                    System.out.print(factor);
                    primes.add(factor);
                    if(factor < n)
                    {
                        System.out.print('*');
                        primeFactors(n/factor);
                    }
                    return primes;
                }
            }
        }
        return primes;
    }

我已尝试通过在每行附近放置打印语句进行调试,但无法弄清楚为什么我的.add()没有在我的HashSet中添加一些值。

2 个答案:

答案 0 :(得分:0)

我似乎通过添加:

来解决这个问题
primes.addAll(primeFactors(n/factor));

在我的if语句中。

答案 1 :(得分:0)

你也可以减少n。快一点。

        for (int factor = 2; factor <= n; factor++)
        {
            if (n % factor == 0)
            {
                System.out.print(factor);
                primes.add(factor);
                while (n % factor == 0)
                {
                     n /= factor;
                     System.out.print('*');
                     primeFactors(n/factor);
                }
            }
        }

如果设置{2, 3}需要是列表[2, 2, 2, 3],则需要在add中完成while