【发布时间】:2012-12-27 22:25:07
【问题描述】:
这是我对费马小定理的实现。有谁知道为什么它不起作用?
以下是我遵循的规则:
- 设 n 为要测试素数的数字。
- 选择介于 2 和 n-1 之间的任意整数 a。
- 计算 a^n mod n.
- 检查 a^n 是否 = a mod n。
我的代码:
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 的素数列表。每当我输入这些数字中的任何一个时,我得到的不是“真”,而是“假”。
这就是我认为代码不起作用的原因。
【问题讨论】:
-
它在什么方面不起作用?
-
为什么
rInt和valDoubles 的值应该总是ints? -
我首先将
if(a.equals(val)){ return "True"; }else{ return "False"; }替换为return a.equals(val);- 有两个原因。 1) 返回boolean比返回String简单得多,即True或False(或者是true或false或..?)。 2)它更短。