[英]Unique prime factors using HashSet
I wrote a method that recursively finds prime factors. 我写了一种可以递归找到主要因素的方法。 Originally, the method simply printed values.
最初,该方法只是打印值。 I am currently trying to add them to a
HashSet
to find the unique prime factors. 我目前正在尝试将它们添加到
HashSet
以查找唯一的主要因素。
In each of my original print statements, I added a primes.add()
in order to add that particular integer into my set. 在每个原始打印语句中,我都添加了
primes.add()
以便将该特定整数添加到我的集合中。
My printed output remains the same, for example, if I put in the integer 24
, I get 2*2*2*3
. 我的打印输出保持不变,例如,如果我输入整数
24
,则得到2*2*2*3
。 However, as soon as I print the HashSet
, the output is simply [2]
. 但是,一旦我打印
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;
}
I have tried debugging via putting print statements around every line, but was unable to figure out why my .add()
was not adding some values into my HashSet
. 我已经尝试通过在每行上放置打印语句来进行调试,但是无法弄清楚为什么我的
.add()
没有在HashSet
添加一些值。
I seem to have fixed this by adding: 我似乎通过添加以下内容解决了此问题:
primes.addAll(primeFactors(n/factor));
Within my if-statement. 在我的if陈述中。
You could also reduce n. 您也可以减少n。 A bit faster.
快一点
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);
}
}
}
If Set {2, 3}
needs to be a List [2, 2, 2, 3]
the add
needs to be done in the while
. 如果Set
{2, 3}
必须是列表[2, 2, 2, 3]
则需要在while
完成add
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.