[英]Unique prime factors using 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
添加一些值。
我似乎通過添加以下內容解決了此問題:
primes.addAll(primeFactors(n/factor));
在我的if陳述中。
您也可以減少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);
}
}
}
如果Set {2, 3}
必須是列表[2, 2, 2, 3]
則需要在while
完成add
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.