51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 1816|回复: 3
打印 上一主题 下一主题

【版主分享】Python如何判断质数(素数)

[复制链接]
  • TA的每日心情
    郁闷
    2018-1-22 08:48
  • 签到天数: 193 天

    连续签到: 1 天

    [LV.7]测试师长

    跳转到指定楼层
    1#
    发表于 2017-5-4 02:29:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    我曾经在2次面试中被问到如何判断质数,所以对这个 问题有种特殊的感觉,今天又独自研究了一翻其写法,竟又有新发现,故写下此篇以记之。先来看下什么是质数:
    1. 质数(Prime number),又称素数,指在大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数(也可定义为只有1与该数本身两个因数的数)。——via维基百科
    复制代码
    简单来说就是,只能除以1和自身的数(需要大于1)就是质数。举个栗子,5这个数,从2开始一直到4,都不能被它整除,只有1和它本身(5)才能被5整除,所以5就是一个典型的质数。那么想计算出一个随机数是不是质数用Python应该怎么写呢?首先第一句话肯定是接受用户输入的数字:
    1. n = int(input("please enter the number:"))
    复制代码
    接着要计算该数是不是质数,那么就要从2开始一直除到该数之前的那个自然数,很明显是一个数字范围:
    1. for i in range(2, n):
    复制代码

    在循环体里面,每次循环当然就是要判断当次除法是否是整除,这里可以使用求模运算,也就是取余,当余数为0时,该数就不是质数:
    1.     if n % i == 0:
    2.         print("%d is not a prime number!" % n)
    3.         break
    复制代码
    这个break意思就是当该数不是质数时,就跳出整个循环,该数就不是我们要的数字了。那么,所有循环迭代都完成后还没有找出能整除的情况的话,那么可以判断该数就是一个质数,所以:
    1. else:
    2.     print("%d is a prime number!" % n)
    复制代码
    那么此时,所有代码就写好了,不过为了看起来简单,没有罩一层是否大于1的判断,用户输入的数字默认需要大于1:
    1. n = int(input("please enter the number:"))
    2. for i in range(2, n):
    3.     if n % i == 0:
    4.         print("%d is not a prime number!" % n)
    5.         break
    6. else:
    7.     print("%d is a prime number!" % n)
    复制代码
    这里要细细品味这段代码,else其实不是和if是一对,而是和for并排的,我们常见的是if...else...或者if...elif...else诸如此类,但其实for也可以和else搭配出现,在这段代码里,当某一次遍历结果余数为0后,break生效,那循环就结束了,那与之成对出现的else代码也就不执行了;当所有遍历结束后没有一次余数为0,那该循环就转到else开始执行,打印输出“该数为质数”。最后我们来随便输2个数字看看功能有没有实现:
    1. please enter the number:11
    2. 11 is a prime number!
    复制代码
    1. please enter the number:21
    2. 21 is not a prime number!
    复制代码


    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-4-24 07:15 , Processed in 0.065226 second(s), 22 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表