我这里有代码,它接受int
中的每个vecArray
并尝试通过一系列for循环确定它是否是素数。但是,当我运行程序时,我无法成功找到/添加给定数组的每个素数到提供的向量。我错过了什么?
Vector<Integer> primeVec = new Vector<Integer>();
Vector<Integer> storage = new Vector<Integer>();
for ( int num : vecArray) {
//create array size of num
resultArray = new int[num];
for(int j = 1; j <= sqrt(num); j++) {
int result = num % j;
if (result == 0) {
storage.add(j);
}
}
//if resultArray has only two integers, then it must be prime
int size = storage.size();
if (size == 2) {
//add each
primeVec.add(num);
System.out.println("You added " + num + " to the Vector for primes!");
}
//print out all primes in vec
for (int e = 0; e < primeVec.size(); e++) {
System.out.println("The prime in element number " + e + " is: " + primeVec.get(e));
}
}
}
}
答案 0 :(得分:1)
您的代码会尝试两次1
,因此resultArray.length
至少会有三次。
您应该在j = 1
而不是j = 0
开始循环,并将resultArray
替换为vector<int>
。
请注意,因子分解不是确定数字是否为素数的最快方法。您不需要存储素数因子来计算它们。此外,一旦您确定某个数字是复合数,您就可以结束循环。最后,您不需要尝试最多num
的所有除数:如果您尝试除sqrt(num)
之前的除数且其中没有一个除以num
,那么您肯定知道{{1}是素数。