用于计算素数的朴素算法 数字存在。例如,你可以 使用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中)。
答案 0 :(得分:5)
好吧,既然您正在创建所有素数列表,那么当您检查数字c是否为素数时,您已经拥有所有较小的素数你的清单。正确?
因此,如果任何小于candidateNo/2
的数字除以您的候选人而不是测试,则只测试是否有任何素数小于candidateNo/2
划分你的候选人。
因此,不是从i = 2 to candidateNo/2
迭代,而是迭代数组列表的元素。为此,当然可以从isPrime函数访问此数组列表,因此要么将其作为参数传递,要么将其作为主类的公共静态元素。
答案 1 :(得分:0)
任何不是素数的数字都可以分解为素数因子。
示例:
15 = 3 * 5
24 = 2 * 2 * 2 * 3