下面是我對Fermat的小定理的實現。有誰知道它爲什麼不起作用?Fermat的小實現問題的實現
下面是我遵循的規則:
- 設n是數以測試素性。
- 選取2到n-1之間的整數a。
- 計算a^n模n。
- 檢查是否a^n = a mod n。
mycode的:
int low = 2;
int high = n -1;
Random rand = new Random();
//Pick any integer a between 2 and n-1.
Double a = (double) (rand.nextInt(high-low) + low);
//compute:a^n = a mod n
Double val = Math.pow(a,n) % n;
//check whether a^n = a mod n
if(a.equals(val)){
return "True";
}else{
return "False";
}
這是素數小於100000的列表,每當我在任何這些數字的輸入,而不是越來越「真實」,我得到「假」。
這就是爲什麼我相信代碼是不工作的原因。
它以什麼方式不起作用? – Hbcdev
爲什麼'rInt'和'val'' Double's的值應該總是爲'int's? – MrSmith42
我會第一次替換'if(a。等於(val)){ return「True」; } else { return「False」; }帶'返回a.equals(val);' - 出於兩個原因。 1)返回'boolean'比返回'True'或'False'(或者它是'true'或'false'或..?)的'String'要簡單得多。 2)它更短。 –