当前位置: 首页 > 面试题库 >

Java中的素数测试如何工作?

郗欣嘉
2023-03-14
问题内容

下面的代码段检查给定数字是否为质数。有人可以向我解释为什么这行得通吗?该代码在为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)询问是否可以number被整除j

素数的定义

一个只能被自己和1整除的数字

因此,如果您测试2到number之间的所有数字,并且没有一个数字能被整除,则它是质数,否则就不是质数。

当然,您实际上不必一路前进number,因为number不能被一半以上的东西完全整除number

具体章节

While循环

本节将通过增加j的值进行操作,如果我们假装number= 12,则它将通过j= 2,3,4,5,6

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

如果陈述

result如果在任何点number都可被整除,则此部分设置为1 j。一旦设置为1,result就永远不会 复位 为0。

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

进一步改进

当然,您可以进一步提高它,因为您实际需要的不高于sqrt(number)此,但是此代码段决定不这样做。您不需要继续走高的原因是因为(例如)如果40可以被4整除,那么它就是4 * 10,则不需要测试4和10。并且在这对对中始终会在下面sqrt(number)

还值得注意的是,它们似乎打算result用作布尔值,但实际上使用整数0和1来表示true和false。这不是一个好习惯。



 类似资料:
  • 下面的代码片段检查给定的数字是否是素数。有人能给我解释一下为什么会这样吗?这段代码在Java考试的学习指南中。

  • 问题内容: 我想用JUnit测试来验证Java中集合的排序算法。如果我在集合中输入“ B”,“ C”,“ A”并希望对其进行排序(例如,按字母顺序排列),那么使用JUnit进行测试的正确方法是什么? 我实现了Comparable接口,并希望确保排序工作正常。 我想这个问题可以从Java或JUnit扩展到任何语言的常规测试。 问题答案: 我将按 预期的 顺序创建另一个具有值的集合,然后仅检查结果是否

  • 问题内容: 如何测试Selenium RC中关注的元素? 问题答案: 以下定位器应在文档中选择活动元素: 如果表单字段或类似元素具有焦点,则它应该是活动元素。希望这可以帮助。

  • 主要内容:数据采样,置信区间可以使用统计信息和分析来监控访问者的操作,以确定产生更高转换率的版本。 A/B测试结果通常以精美的数学和统计术语给出,但数字背后的含义其实很简单。 有两种重要的方法可以通过它们检查A/B测试的转换率 - 数据采样 置信区间 下面详细讨论这两种方法。 数据采样 样本数量取决于执行的测试次数。 转化率的计数称为样本,收集这些样本的过程称为采样。 示例 假设您有两种产品A和产品B,想要根据市场需求收集样

  •   selenium是一个非常棒的Web软件测试工具,他对Ajax支持非常好,本人强烈推荐。   软件测试里很重要的一部,就是定位页面的元素,selenium提供如下强大的定位元素的方法。   ● id=id   ● name=name   ● dom=javascriptExpression   ● xpath=xpathExpression   ● link=textPattern   ● c

  • 我有一个表“MyService”,对两列(名称空间和名称)有唯一的约束,Id是主键名称|类型| |-------------------id |长| |命名空间|字符串| |名称|字符串| |值|字符串| 我想编写单元测试以确保用户不能插入具有相同(命名空间和值)的新行。所以我这样编码: 我有两个问题: 据我所知,如果实体不存在,jparepository将插入,如果实体存在,jpareposit