我真的不明白我的讲师在这里得到了什么 - 关于用Java计算素数的讲义

时间:2010-11-29 18:41:43

标签: java arraylist primes

  

用于计算素数的朴素算法   数字存在。例如,你可以   使用while循环检查c%i   != 0表示所有正整数i   我> 1和i< C。

     

然而,确实如此   不难看出那更好   方法是确保c%p!= 0   对于所有素数p,使得p <1。   C。使用ArrayList中的素数   馅饼很容易。再次注意   这表明你使用了一段时间   循环。

我试图实现这两种方法,当我得到第一个时,检查c%i!= 0,我不明白第二条信息说更好的算法是使用c %p!= 0。这不意味着我必须知道计算素数的所有素数吗?

目前我所拥有的内容如下:

  public static void isPrime(int candidateNo) {
while (i <= candidateNo/2) {
  if (candidateNo%i==0 && i!=1) {
    return false;
  }
  else
    return true;
}

}

哪个有效,但效率低得很低。我正在使用该函数创建素数的arraylist(如果函数返回true,则将数字添加到arraylist中)。

2 个答案:

答案 0 :(得分:5)

好吧,既然您正在创建所有素数列表,那么当您检查数字c是否为素数时,您已经拥有所有较小的素数你的清单。正确?

因此,如果任何小于candidateNo/2的数字除以您的候选人而不是测试,则只测试是否有任何素数小于candidateNo/2划分你的候选人。

因此,不是从i = 2 to candidateNo/2迭代,而是迭代数组列表的元素。为此,当然可以从isPrime函数访问此数组列表,因此要么将其作为参数传递,要么将其作为主类的公共静态元素。

答案 1 :(得分:0)

任何不是素数的数字都可以分解为素数因子。

示例:

15 = 3 * 5
24 = 2 * 2 * 2 * 3