python二级练习(8)

栏目: Python · 发布时间: 7年前

内容简介:python二级练习(8)

8. 输入一个数,判断这个数是否为素数,并输出判断结果。

(所谓素数,是指除了1和该数本身之外,不能被其它任何整数整除的大于1的数。)

解法一:

#python 3.6
#蔡军生 
#http://blog.csdn.net/caimouse/article/details/51749579
#
import random

isPrime = False
num = int(input('请输入一个整数:'))
for i in range(2, num):
    if num % i == 0:
        isPrime = True
        break;
    
if isPrime or num == 1:
    print(num, ' 不是一个素数')
else:
    print(num, ' 是一个素数')

输出如下:

请输入一个整数:100

100  不是一个素数

解法二:

#python 3.6
#蔡军生 
#http://blog.csdn.net/caimouse/article/details/51749579
#
from math import sqrt


isPrime = True
num = int(input('请输入一个整数:'))


if num == 2 or num == 3:
    isPrime = True
elif num == 1 or num % 6 != 1 and num % 6 != 5:
    isPrime = False
else:
    for i in range(5, int(sqrt(num)) + 1, 6):
        print(i)
        if num % i == 0 or num % (i + 2) == 0:
            isPrime = False
#    
if isPrime:
    print(num, ' 是一个素数')
else:
    print(num, ' 不是一个素数')

最后一种解决法是快速的判断方法。

首先看一个关于质数分布的规律:大于等于5的质数一定和6的倍数相邻。例如5和7,11和13,17和19等等;

证明:令x≥1,将大于等于5的自然数表示如下:

······ 6x-1,6x,6x+1,6x+2,6x+3,6x+4,6x+5,6(x+1),6(x+1)+1 ······

可以看到,不在6的倍数两侧,即6x两侧的数为6x+2,6x+3,6x+4,由于2(3x+1),3(2x+1),2(3x+2),所以它们一定不是素数,再除去6x本身,显然,素数要出现只可能出现在6x的相邻两侧。这里有个题外话,关于孪生素数,有兴趣的道友可以再另行了解一下,由于与我们主题无关,暂且跳过。这里要注意的一点是,在6的倍数相邻两侧并不是一定就是质数。

比特币源码入门教程

https://edu.csdn.net/course/detail/6998

深入浅出Matplotlib

https://edu.csdn.net/course/detail/6859

深入浅出Numpy

http://edu.csdn.net/course/detail/6149

Python游戏开发入门

http://edu.csdn.net/course/detail/5690

你也能动手修改C编译器

http://edu.csdn.net/course/detail/5582


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Linux集群体系结构

Linux集群体系结构

Alex Vrenios / 马朝晖 / 机械工业出版社 / 2003-1 / 38.00元

本书对Linux集群体系结构的硬件环境组建与其软件开发作了深入细致的介绍。通过阅读本书,可以对Linux集群体系结构有深入的认识,掌握并了解如何设计和构造集群计算机。本书使你了解到开发项目可能遇到的问题,并掌握测试和调整分布式算法。 本书适合计算机系统集成技术人员、管理人员和计算机科研人员作为参考。一起来看看 《Linux集群体系结构》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试