【问题标题】:Determine if a number is prime [closed]确定一个数字是否是素数[关闭]
【发布时间】:2016-11-06 18:23:43
【问题描述】:
public static void isPrime(int number)
{
    for ( int i = 2; i<number ; i ++)
    {
      if ( number%i!=0 ) {
        System.out.println(number + " is not a prime ");
      }
      else
      {
        System.out.println(number +" is  a prime ");
      }
    }

结果是:

60 是质数
60 不是素数
60 不是素数
60 是质数
60 不是素数
60 不是素数
60 不是素数
60 不是素数
60 是质数
60 不是素数
60 不是素数
60 不是素数
60 不是素数
60 不是素数
60 不是素数
60 不是素数

我想要的只是它是否是素数;在这种情况下不是。

【问题讨论】:

  • 正确缩进你的代码,你应该能更好地看到问题。
  • 您只是对每个数字执行一次检查,如果您可以将其除以 i,则立即说一个数字是素数(而不是检查所有其他 i)跨度>
  • 也试着解释你的算法。是什么让您认为它应该给出与您现在得到的结果不同的结果?
  • 为什么投反对票?

标签: java


【解决方案1】:

您缺少一个括号。如果您保持代码干净,它将解决问题。

同样在你的 if 语句中,你正在检查 number % 2 != 0。如果它不等于 0,那么它可能是一个素数。所以我把它改成number % 2 == 0来解决这个问题。

另一个错误是,即使知道数字不是质数,您仍继续打印。

public static void isPrime(int number)
    {
        for ( int i = 2; i<Math.sqrt(number) + 1; i ++)
        {
            if ( number%i==0 ) {//If number is not a prime
                //Will print that the number is not a prime once
                System.out.println(number +" is not a prime number.");
                return ; //Will exit the method
            }
        }
        //If you reach this point then the number is prime.
        System.out.println(number +" is a prime number.");
    }

【讨论】:

  • 您可能需要i &lt; Math.sqrt(number) + 1,因为它需要小于或等于平方根,并且Math.sqrt 返回一个双精度数(并非每个数字都是完美的平方) .
  • 确保选择最佳答案
  • 但是为什么要使用 sqrt 我只是想了解
  • 查看@nbrooks 对您的问题提出的第四条评论
  • @YahiaA.Seridi 选择此答案作为您问题的答案,以便将其注册为已回答。
猜你喜欢
  • 1970-01-01
  • 2015-01-22
  • 1970-01-01
  • 1970-01-01
  • 2013-07-06
  • 2011-11-27
  • 1970-01-01
  • 1970-01-01
  • 2016-09-27
相关资源
最近更新 更多