操纵数组和向量

时间:2013-01-10 19:24:54

标签: java

我这里有代码,它接受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));
    }
  }
 }
}

1 个答案:

答案 0 :(得分:1)

您的代码会尝试两次1,因此resultArray.length至少会有三次。

您应该在j = 1而不是j = 0开始循环,并将resultArray替换为vector<int>

请注意,因子分解不是确定数字是否为素数的最快方法。您不需要存储素数因子来计算它们。此外,一旦您确定某个数字是复合数,您就可以结束循环。最后,您不需要尝试最多num的所有除数:如果您尝试除sqrt(num)之前的除数且其中没有一个除以num,那么您肯定知道{{1}是素数。