文章目录

  • 作业标题
  • 一、常规方法(最低效)
    • 思路说明:
    • 缺点:
  • 二、稍微高效的方法(x/2)
    • 思路说明:
    • 缺点:
  • 三、高效方法(根号x)
    • 思路说明:

作业标题

给定一个数字,判定一个数字是否是素数。
素数又叫质数,质数是指在大于1的自然数中,除了1和它本身以外,不能被其他自然数整除的数。最小的质数是2,它也是唯一的偶数质数,最前面的质数依次排列为:2、3、5、7、11、13、17、19、23、29、31等。
第一种方法是我自己做作业时想到的,但是随着只是不断深入,我们还是要尽可能的将每个解法做到高效。


一、常规方法(最低效)

思路说明:

从而开始,一旦出现能整除的,就表示不是素数,如果从二开始到她本身之前都没有整除的,说明就是素数,这一解法从数组本身的定义出发的。

缺点:

当数字较大时,循环次数太多,所以不建议使用。

    public static void main(String[] args){Scanner sc=new Scanner(System.in);int a=sc.nextInt();int i=0;for(i=2;i<a;i++){if(a%i==0){break;}}if(i==a){System.out.println(a+"是素数");}else{System.out.println(a+"不是素数");}sc.close();}

运行结果:

二、稍微高效的方法(x/2)

思路说明:

将循环范围定在2到指定数的二分之一(原理:任何一个数的最大因数都小于等于它的二分之一,所以只要从2查找到x/2,如果都没有被整除就是素数,因为到这里已经查找到他的最大因数了。例如24的最大因数为12,100的最大因数为50.)这样就会减少循环次数。

缺点:

效率提高了不少,但也并不是最优解。
代码如下(示例):

    public static void isPrime2(int x){boolean flag;int i=0;int j=0;flag=true;for(j=2;j<=x/2;j++){if(x%j==0){flag=false;break;}}if(j>x/2){System.out.println("是素数");}else{System.out.println("不是素数");}}public static void main(String[] args) {isPrime2(17);}

三、高效方法(根号x)

思路说明:

其实只要把循环一直从2尝试到根号x就可以,不难发现,一个数的两个因数中,毕然有一个小于等于根号x,一个大于等于根号x,例如100的因数有:1和100,2和50,4和25,5和20,10和10.所以只要从2尝试到根号x,如果都没有被整除,就是素数,否则就不是。和第二种方法类似,但是效率相对更高,推荐使用。

    public static void isPrime1(int x){boolean flag;int i=0;int j=0;flag=true;for(j=2;j<=Math.sqrt(x);j++){if(x%j==0){flag=false;break;}}if(j>Math.sqrt(x)){System.out.println("是素数");}else{System.out.println("不是素数");}}public static void main(String[] args) {isPrime1(17);}

求素数的三种方法(Java实现)相关推荐

  1. 【数论】求素数的三种方法

    素数的定义 素数也叫质数.一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做素数:否则称为合数(规定1既不是质数也不是合数). 一.试除法(判断素数) 试除法顾名思义就是用 2 到 n ...

  2. java中隐函数求导法则_隐函数求导的三种方法

    this.p={ m:2, b:2, loftPermalink:'', id:'fks_085075084086088070081083074065081087082066093087080', b ...

  3. python求平方根的三种方法

    python求平方根的三种方法 题干描述 题目解答 题干描述 没啥好说的qwq,求根号下x,并舍弃小数部分,只保留整数 题目解答 方法一:不多bb,直接0.5次方(这应该是最没有营养的解法,面试官估计 ...

  4. 求最小公倍数的三种方法(C语言)

    求最小公倍数的三种方法 1.常规暴力求解法 2.辗转相除法 3.迭乘法 //1.常规暴力求解法 #include <stdio.h> int main() {int a = 0;int b ...

  5. C语言求最大公约数三种方法详解

    C语言求最大公约数三种方法详解 题目要求 常用写法(穷举法) 辗转相减法 辗转相除法 main函数 整体代码 题目要求 运行最大公约数的常用算法,并进行程序的调式与测试. 常用写法(穷举法) 从两个数 ...

  6. php判断质数,php如何判断是否为素数?判断素数的三种方法(代码示例)

    本篇文章给大家带来的内容是介绍php如何判断是否为素数?判断素数的三种方法(代码示例).有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助. 什么是素数? 质数又称素数.一个大于1的自然数 ...

  7. 求素数的几种方法(通俗易懂)

    博主简单的写下这篇文章,主要为了更好地复习和理解,希望对各位有帮助. 素数:指一个只能被1和它本身整除的数. 青铜级别求素数:枚举范围内的每个数在2到本身的范围中是否有被整除的数.没有就是素数,有就不 ...

  8. C语言求幂的三种方法

    用三种方法求幂值 一. 暴力递归 直接对x乘y次 int result(int x,int y) {int num=1;for (int i=1; i<=y; i++) {num*=x;}ret ...

  9. c语言程序π,C语言求圆周率π(三种方法)

    题目1) 利用公式①计求π的近似值,要求累加到最后一项小于10^(-6)为止. 题目2) 根据公式②,用前100项之积计算π的值. 题目1)提供了一种解法,题目2)提供了两种解法,请看解析. 题目1) ...

  10. c语言求圆周率 . 4,C语言求圆周率π(三种方法)(4页)-原创力文档

    C语言求圆周率π(三种方法) 题目1) 利用公式①计求π的近似值,要求累加到最后一项小于10^(-6)为止.题目2) 根据公式②,用前100项之积计算π的值.题目1)提供了一种解法,题目2)提供了两种 ...

最新文章

  1. ganglia metric 默认监控项翻译
  2. Linux下C语言程序的内存布局(内存模型)
  3. factorybean 代理类不能按照类型注入_Spring注解驱动开发之四——@Import快速导入组件、FactoryBean 定义工厂注册组件...
  4. Map集合HashMap TreeMap的输出方法
  5. 从框架源码中学习创建型设计模式
  6. c查看变量类型_C语言的变量、常量及运算
  7. java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils
  8. molicode生成vue增删改查功能
  9. JavaEE Tutorials (25) - 使用Java EE拦截器
  10. ssh: connect to host port 22: Connection refused
  11. e480Linux无法发现无线网卡,ThinkPad无线不能用无法连接无线网络的具体排查流程图解...
  12. Windows强制关机之后,自动修复失败,无法开机的问题解决
  13. 网易云音乐、微博成新规后首批IPO企业 招股书披露数据安全风险
  14. 计算机无法识别ipad,电脑无法识别iphone、ipad怎么办
  15. 查互联网ip(公网ip)
  16. 小学生计算机认识ppt,小学生认识计算机概要.ppt
  17. 机器学习笔试精选 100 题
  18. uniapp爱玩小灰视频播放器使用流程
  19. 条件极值例题_条件极值与函数习题课.doc
  20. java 整数相除 小数点_java整数相除保留小数

热门文章

  1. 要是面试官再问我synchronized,我就这么答
  2. git add 所有修改文件_Git的安装及创建版本库
  3. 一纬度横直线等于多公里_高中物理必修一、必修二知识点提纲,暑期预习必备...
  4. TCP四次握手断开连接(图解)
  5. ApacheCN Python 译文集 20211108 更新
  6. 大学计算机一级准考证打印,河海大学计算机等级考试准考证打印入口
  7. Delphi XE 10.2.3如何添加PDF阅读器组件
  8. JAVA实现的小程序
  9. 用java语言写一个实用小程序_用java语言,编写一个小程序。
  10. matlab 自动交易系统设计2