【发布时间】:2019-01-04 17:48:57
【问题描述】:
我正在尝试实现一种方法,该方法检查任何整数,如果它是素数,则使用费马的素数测试返回 true。
我根据输入是否小于 40 来划分问题。如果输入小于 40,那么我对每个整数应用测试,直到 n-1。否则,如果整数大于 40,则对直到 40 的每个整数都应用测试。但是,对于某些素数,它会失败。
public static boolean isPrime (double n){
int counter=0;
boolean isPrime=false;
if(n<40) {
for (int a = 2; a < n - 1; a++) {
if (Math.pow(a, n - 1) % n == 1) counter++;
}
if (counter == n - 3) isPrime = true;
}
else {
for (int a = 2; a <= 40; a++) {
if (Math.pow(a, n - 1) % n == 1) counter++;
}
if (counter == 39) isPrime = true;
}
return isPrime;
}
这是逻辑问题还是其他问题?
【问题讨论】:
-
“但是,对于某些素数,它会失败”......例如......?
-
它适用于 3,5,7,但不适用于 19,即
-
鉴于素数根据定义是整数,为什么你的函数需要双精度数?
-
我试过 int 还是不行。我只是把它改成双倍,因为我认为这是一个 math.pow 问题
-
我认为这是一个合乎逻辑的问题......你不“做费马测试”你聚合它们! ...而且它似乎没有按预期的方式工作