isPrime()
檢查一個數是否爲素數,並且getPrimes(int upper)
得到所有素數達到幷包括上限。我想要sievePrimeFactorSets
對每個數字的所有素數因子(不重複)做一個HashSet,並將該HashSet存儲在給定的值上,例如。 HashSet在primeFactors.get(20) = [2,5]
。迭代索引的HashSets ArrayList我沒有指定?
現在它增加了每一個主要到每價值,所以primeFactors.get(20) = [2,3,5,7,11,13,etc]
。這是爲什麼發生?
public ArrayList<HashSet<Integer>> sievePrimeFactorSets(int upper)
{
ArrayList<HashSet<Integer>> primeFactors = new ArrayList<HashSet<Integer>>();
HashSet<Integer> empty = new HashSet<Integer>();
for (int i = 0; i <= upper; i++)
{
primeFactors.add(empty);
}
ArrayList<Integer> primes = getPrimes(upper);
for (Integer p : primes)
{
for (int j = p; j <= upper; j+=p)
{
primeFactors.get(j).add(p);
}
}
return primeFactors;
}
public ArrayList<Integer> getPrimes (int upper)
{
ArrayList<Integer> primes = new ArrayList<Integer>();
primes.add(2);
for (int i = 3; i <= upper; i++)
{
if (isPrime(i))
{
primes.add(i);
}
}
return primes;
}
建議使用'I + = 2',而不是'I ++'在'getPrimes()'循環,2是唯一的偶素 –
也許我建議一個'地圖>'可能比使用'ArrayList >'更適合這種事情? –