我的程序的目标是编写一个程序,提示用户输入一个整数。该程序将读取整数并确定它是否为素数。如果它不是素数,它会告诉用户所有的除数。
这是我得到的结果,但是当我用 169 或 289 这样的数字测试它时,程序说它们是质数。我知道问题出在这一行:
int[] div = new int[] { 2,3,4,5,6,7,8,9};
我试着做这样的事情:
for (int s = nr; s != 0 ; s--) {
if (nr%s == 0) {
int[] div = new int[]{s}; }
但是没有用。一点帮助或正确的方向会有很大帮助。谢谢!
public static void main(String[] args){
System.out.println("enter a number:");
Scanner scanner = new Scanner (System.in);
int nr = scanner.nextInt();
int[] div = new int[] { 2,3,4,5,6,7,8,9};
boolean prime = nr >= 2;
int i = nr;
for(int j = 0; j< div.length && prime && i> div[j]; j++)
if(i % div[j] == 0)
prime = false;
if(prime){
System.out.println(i + " is a prime");
}else{
System.out.print(i + " is divisible");
for(int k = 2; k < i; k++)
if(i % k == 0){
System.out.print( k);
System.out.print(",");}
}
} }
最佳答案
您只尝试将 9 以内的数字作为除数。因此,任何具有全部 10 或更高因数的事物,例如 169 是 13 乘以 13,您将找不到 13。
与其将除数存储在数组中,不如考虑使用整数并向上计数。也就是说,不要使用 div[j]
只是使用 j 作为除数,并且不要让它停在 10。让它停在可能的最高除数(这是的平方根您要查找质数的数字)。
关于java - 在java中测试素数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9846779/