Java的素数测试如何工作?

下面的代码片段检查给定的数字是否是素数.有人可以向我解释为什么这样做吗?这段代码是给我们一个 Java考试的学习指南.
public static void main(String[] args)
{    
    int j = 2;
    int result = 0;
    int number = 0;
    Scanner reader = new Scanner(System.in);
    System.out.println("Please enter a number: ");
    number = reader.nextInt();
    while (j <= number / 2)
    {
        if (number % j == 0)
        {
           result = 1;
        }
        j++;
    }
    if (result == 1)
    {
        System.out.println("Number: " + number + " is Not Prime.");
    }
    else
    {
        System.out.println("Number: " + number + " is Prime. ");
    }
}

解决方法

总体理论

条件if(number%j == 0)询问数字是否完全可被j整除

一个素质的定义是

a number divisible by only itself and 1

所以如果你测试2和数字之间的所有数字,并且没有一个是完全可分的,那么它是一个素数,否则不是.

当然,你实际上并不一定要走到这个数字上,因为数字不能被一半以上的任何东西所区分开.

具体部分

循环

这部分运行在增加j的值,如果我们假设该数字= 12,那么它将通过j = 2,3,4,5,6

int j = 2;
  .....
  while (j <= number / 2)
  {
      ........
      j++;
  }

如果声明

本节将结果设置为1,如果在任何点数字都可以被j整除.一旦设置为1,结果将永远不会重置为0.

......
  if (number % j == 0)
  {
     result = 1;
  }
  .....

进一步改进

当然,你可以改进甚至更多,因为你实际上需要不要高于sqrt(数量),但是这个代码段已经决定不这么做了.你所需要的原因不会更高,因为如果(例如)40可以被4整除,则为4 * 10,则不需要为4和10测试.而那些对将始终低于sqrt(数).

还值得注意的是,它们似乎打算将结果用作布尔值,但实际上使用0和1的整数来代替true和false.这不是好习惯.

相关文章

Alt+回车 导入包,自动修正Ctrl+N 查找类Ctrl+Sh...
运行程序出现下面错误:HTTP Status 500 ------------------...
1、建立DM的profile,使用的模版在install_root/profileTempl...
使用dom4j解析XML时,要快速获取某个节点的数据,使用XPath是...
英文操作系统导致 Debug 下的变量查看时显示乱码,可通过改变...
eclipse中javascript报错问题处理:三个地方:&lt;1&...