我写了一个递归找到素因子的方法。最初,该方法只是打印值。我目前正在尝试将它们添加到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
中添加一些值。
答案 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
。