【发布时间】:2016-05-05 09:04:18
【问题描述】:
根据https://en.wikipedia.org/wiki/Lucas_primality_test,如果a^(n-1) 不等于1 mod n,则该数是合数。我们知道,3 是质数,而 9 不是。我的 Java 技能已经过时了,我很可能忘记了一些非常简单的事情。请记住,这也只是测试的开始,而不是测试的完整实施。下面的示例代码对两个数字都返回 false,而只有 9 应该返回 false。
import java.util.Random;
import java.util.Scanner;
public class LucasTest
{
private static int n;
private static boolean primeResult;
public static int randInt(int min, int max) {
Random rand = new Random();
int randomNum = rand.nextInt((max - min) + 1) + min;
return randomNum;
}
public static boolean isPrime(int num)
{
int a = randInt(2, num - 1);
int b = num - 1;
double c = Math.pow(a,b);
if (c != (1.0 % num)) {
return false;
}
return true;
}
public static void main(String args[])
{
System.out.println("Enter an integer:");
Scanner pNum = new Scanner(System.in);
n = pNum.nextInt();
primeResult = isPrime(n);
System.out.println("Number is likely prime?: " + primeResult);
}
}
【问题讨论】:
-
您是否在 IDE 调试器中跟踪过代码?
-
我不确定在这种情况下我是否会信任
Math.pow,而不是实际的整数幂 mod n 方法(您必须自己编写)。 -
Jim 目前正在使用 BlueJ,调试器似乎没有输出任何对我有用的东西。
-
我不知道你期望 1 mod num 是什么。以及如何在没有任何循环的情况下检查素数?我想你必须再研究一下公式。
-
是的,意识到那里的错误。凌晨 1 点作品的产物。另外,我之前说过这只是最开始的部分。
标签: java math random integer modulo