python判断互质_Python3 判断质数以及计算一个数字的质因数
Python3 初学实践案例(11)判断质数以及计算一个数字的质因数
昨天晚上看到群里有人问如何计算质因数,我想了一下,实现了这个计算质因数的脚本。质因数(素因数或质因子)在数论里是指能整除给定正整数的质数。除了1以外,两个没有其他共同质因子的正整数称为互质。因为1没有质因子,1与任何正整数(包括1本身)都是互质。正整数的因数分解可将正整数表示为一连串的质因子相乘,质因子如重复可以用指数表示。根据算术基本定理,任何正整数皆有独一无二的质因子分解式[1] 。只有一个质因子的正整数为质数。
举例:10 = 2 * 5; 8 = 2 * 2 * 2; 9 = 3 * 3
好,知道了具体的概念,我们就开始时间代码:
计算一个数字的质因数完整代码#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
import sys
# 判断一个数字是否为质数
def isPrime(n):
if n <= 1:
return False
i = 2
while i*i <= n:
if n % i == 0:
return False
i += 1
return True
# 计算一个数字的质因数
def calc(num):
i = 2
while i*i <= int(num):
#for i in range(2,int(num**0.5) + 1):
if num%i == 0:
arr.append(i)
if isPrime(num/i):
arr.append(int(num/i))
else:
calc(num/i)
break
i += 1
# 输入数字
def checkInput():
num = len(sys.argv) > 1 and sys.argv[1] or input('输入: ')
while not num.isdigit():
print('输入的内容必须是正整数哦!')
num = input('输入: ')
return int(num)
# 输出结果
def echo(num, a):
res = '数字 '+str(num)+' 的质因数结果是: '
if len(a) == 0:
res += str(num)
else:
res += str(a)[1:len(str(a))-1].replace(', ','*')
print(res)
# 主函数
if __name__ == '__main__':
print('这是一个计算一个数字的质因数的程序\n请输入您要计算质因数的数字')
num = checkInput()
arr = []
calc(num)
echo(num, arr)
重点解析
判断数字是否为质数
计算质数的关键是要减少运算量。如果傻呢,就从1循环到这个数字来进行全量循环计算。聪明一点就不需要了,只需要循环到这个数字的平方根的数字即可。
我之前在 js 中就是这么干的。上面的代码我是从网上找到的,仔细看了一下,这段代码真的是绝顶聪明。因为循环到平方根,和循环数字用乘法递增,显然后者的运算量要小很多。
重点代码:while i*i <= n:
if n % i == 0:
return False
i += 1
实际体验下来,确实计算效率非常非常高!然后我把计算质因数也改成了这种乘法运算,抛弃了原来的计算平方根的算法。
检查输入是否为数字
在第一步中,我们就需要用户输入一个数字。这里我们使用 python 自带的 input 方法获取用户的输入。但是用户输入的不一定是一个数字,所以需要进行校验,如果不正确的话,就必须重新输入。
一开始我是用的递归的方式来进行处理,但是发现这样如果 return 处理不好就会很麻烦。所以改变了思路,使用 while 来进行处理,果然简单了很多。
and or 用法
这个脚本允许你直接在脚本后面缀上数字来进行直接运算,也可以先进入脚本,然后输入数字进行运算,最重要的就是这个 and or 的使用:num = len(sys.argv) > 1 and sys.argv[1] or input('输入: ')
如果有传参,则使用传参,如果没有传参,则让用户输入一个参数。传参和输入,是使用的同一个校验脚本。
有点类似于三元运算,但是又不是。
字符串的截取与替换
python 的字符串的截取实在是太方便了。string[1,5]
简单方便不用记忆。
而在替换方面和 js 是差不多的。都是 replace 方法。
计算质因数本身没什么特别的,只是利用了一个数组来存放这个它的质因数。算法比较简单,就不做另外的说明了。
最后,看下执行结果以及运算效率:
上图是几个很小的数字的运算的结果,顺便演示了传参和后输入数字的结果。
从结果我们可以看到这个质数是非常大的,但是运算还是很快就结束了。
我没有再使用命令行处理库来更加完善这个脚本,因为目前这个样子已经非常精简非常好用了。
python判断互质_Python3 判断质数以及计算一个数字的质因数相关推荐
- CCF NOI1028 判断互质
问题链接:CCF NOI1028 判断互质. 时间限制: 1000 ms 空间限制: 262144 KB 题目描述 输入两个正整数m和n,判断m和n是否互质(即最大公约数为1),是则输出Yes,否则 ...
- C语言程序编写如何判断互质,CCF NOI1028 判断互质
时间限制: 1000 ms 空间限制: 262144 KB 题目描述 输入两个正整数m和n,判断m和n是否互质(即最大公约数为1),是则输出Yes,否则输出No. 输入 输入两个整数m和n,中间用空 ...
- python 计算数字位数,Python | 计算一个数字的总位数
先决条件: Python中的二进制数系统 给定一个数字,我们必须使用Python查找二进制值的总位数来表示该数字. 示例 Input: num = 61 Binary value of 61 is = ...
- c语言 判断互质,[经典算法] 找出某数以内与其互质的数
起因:前几天做了一个这样的题目,感觉自己变成了一个智障,来写写算法: 相关定义: ①质数定义:没有除 '1' 以外的因子的数就是质数.如:1.3.5.7.11等等. ②互质定义:两个数之间除 '1' ...
- java判断两个数互质_AcWing 458. 比例简化-java(无需判断互质)
因为数据范围很小,这道题的基本思路就是枚举所有的A'和B',找出最小的那个. 枚举需要满足下面两个条件 1.A'和B'互质 2.A'/B'的比例大于等于原来的比例,并且尽可能接近. 其实这里无需判断A ...
- python统计列表中元素个数_python中计算一个列表中连续相同的元素个数方法
python中计算一个列表中连续相同的元素个数方法 最简单的例子: a = [1,1,1,1,2,2,2,3,3,1,1,1,3] # 问:计算a中最多有几个连续的1 很明显,答案是4 如果用代码实现 ...
- python判断互质_整数判断是否互质并求逆元的 python 实现
标签: 算法来自<密码学原理与实践>page129 #!/usr/dev/python #-*- coding:utf-8 -*- ''' Extended Euclidean algor ...
- python获取字符串第一个字母_Python3基础 字符串 capitalize 返回一个新的字符串,它的第一个字母大写...
镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体. ------------------------------------- ...
- 【数论】 质数知识总结(质数判断、筛选、质因子分解、互质)
文章目录 一.定义 二.质数的判断 三.质数的筛选 四.质因子分解 五.互质 一.定义 质数,又称素数,若一个正整数无法被除了1和它自身以外的其它数整除,则称其为质数,否则为合数.特殊地,1既不是合数 ...
- python判断两个数是否互质_《算法》第一章——判断两个整数是否互质
判断两个整数互质的方法 概念:公约数只有1的两个数叫做互质数.根据互质数的概念可以对一组数是否互质进行判断.如:9和11的公约数只有1,则它们是互质数. 求商判断法:用大数除以小数,如果除得的余数与其 ...
最新文章
- python os system用法_Python调用系统命令os.system()和os.popen()的实现
- #mysql50#_#mysql50#.ssh设个啥数据库?
- Python -bs4反爬虫解决方法
- OpenCV伪彩色applyColorMap函数
- jq之hide(1000)
- hadoop开启后jps只有jps一个进程
- 荐一个不错的UI设计网站: uimaker
- 微信开发者工具之WXS和简单组件
- yum源的三种配置方式
- 用K-Means和DBSCAN算法对西瓜数据集4.0进行聚类分析
- Python3网络爬虫(十四):跟股神巴菲特学习炒股之财务报表入库(MySQL)
- 全球及中国浴用纺织品行业商业模式分析及投资风险预测2022年版
- win7访问XP或者2003共享,提示密码错误的解决办法
- 微信小程序实现跳转到另外一个小程序的方法
- Android常用控件有哪些?如何使用?
- android控制台字体大小设置,Android studio 4.1 豆沙护眼色配置、字体大小设置、内存大小设置...
- ailx10的hacknet攻略005
- 图片大小自适应垂直居中的方法
- HR推荐:应届生简历制作的细节
- CDN是什么?为什么要使用CDN?
热门文章
- 虚拟服务器防病毒,windows 2008 Hyper-v虚拟化防病毒
- 三口烧瓶规格有哪些_三口烧瓶有哪些规格,用途是什么 | | 化工资讯网
- Android TextView设置下划线
- 360极速模式版本,出现已经取消网页导航现象,怎么解决呢?
- 大数据文本相似去重方案
- 学习pytorch中归一化transforms.Normalize
- 想要成功,你得像剥洋葱一样一层一层地撕开自己
- 【网络是怎么连接的】| 【03】探索集线器、交换机和路由器
- 技术干货 | 如何用MindSpore优化器加速收敛高度逼近最优值?
- linux远程灰屏,解决配置Ubuntu中vnc远程显示灰屏