求一个数的最小素数因子序列
**
求一个数的最小素数因子序列
**
- 如 120 = 22235,其中2, 2,2,3,5就是120 的最小素数因子 90 = 233*5
,其中2,3,3,5 就是90 的最小素数因子
具体思路是:
- 计算出该数字的所有质数因子
def isPrime(n): #判断一个大于1的整数是否是素数,返回值为True和Falseisprime = Truefor i in range(2,n):if n % i == 0:isprime = Falsebreakreturn isprime
lsPrimeDivisor = [ ] #所有素数因子列表
for i in range(2,num//2+1):if num%i==0 and isPrime(i):lsPrimeDivisor.append(i)
2.使用连续除法方法,求出最小素数因子序列,以120为例:
3.主函数:
#以下为主函数
num = eval(input("输入一个整数:"))lsPrimeDivisor = [ ] #所有素数因子列表
for i in range(2,num//2+1):if num%i==0 and isPrime(i):lsPrimeDivisor.append(i)print(lsPrimeDivisor[0], end="") #逗号间隔思路,先提前打印一个不换行
num = num / lsPrimeDivisor[0]
i = 0
while i<len(lsPrimeDivisor): #打印所有最小因子if num % lsPrimeDivisor[i] == 0: #判断最小素数因子print(",",lsPrimeDivisor[i], end = "") #先打逗号后打值num = num / lsPrimeDivisor[i] #当除数能被当前素数因子整除时,求其整除的商作为下次迭代的除数#print(num)else: #当商不能被当前素数因子整除时,换下个素数因子i += 1
4.完整代码
def isPrime(n): #判断一个大于1的整数是否是素数,返回值为True和Falseisprime = Truefor i in range(2,n):if n % i == 0:isprime = Falsebreakreturn isprime#以下为主函数
num = eval(input("输入一个整数:"))lsPrimeDivisor = [ ] #所有素数因子列表
for i in range(2,num//2+1):if num%i==0 and isPrime(i):lsPrimeDivisor.append(i)print(lsPrimeDivisor[0], end="") #逗号间隔思路,先提前打印一个不换行
num = num / lsPrimeDivisor[0]
i = 0
while i<len(lsPrimeDivisor): #打印所有最小因子if num % lsPrimeDivisor[i] == 0: #判断最小素数因子print(",",lsPrimeDivisor[i], end = "") #先打逗号后打值num = num / lsPrimeDivisor[i] #当除数能被当前素数因子整除时,求其整除的商作为下次迭代的除数#print(num)else: #当商不能被当前素数因子整除时,换下个素数因子i += 1
5.课后答案:
# Prompt the user to enter a positive integer
number = eval(input("Enter a positive integer: "))# Find all the smallest factors of the integer
print("The factors for " + str(number) + " is ", end = "")
factor = 2
while factor <= number:if number % factor == 0:number = number / factorprint(factor, end = " ")else:factor += 1
6.总结:
解题思路很重要
求一个数的最小素数因子序列相关推荐
- 求一个数的最小素因子外加快速分解质因子
这种方法使用与数据小于1e7, 这种适用于分解1到n所有数的质因子,而且打印出来是从小到大排好序的 首先找到每个数的最小质因子,不停的除以最小素因子,只到x==1 如果是分解单个还是根号n复杂度的更好 ...
- c语言求两个数的最小公倍数辗转相除法,C语言辗转相除法求2个数的最小公约数...
辗转相除法最大的用途就是用来求两个数的最大公约数. 用(a,b)来表示a和b的最大公约数. 有定理: 已知a,b,c为正整数,若a除以b余c,则(a,b)=(b,c). (证明过程请参考其它资料) 例 ...
- 【面试题视频讲解】求一个数的所有质因子
P2求一个数的所有质因子 https://www.bilibili.com/video/av91892983?p=2
- 求两个数的最小公约数和最小公倍数
题目: 求两个数的最小公约数和最小公倍数 思路: 求最大公约数: 欧几里得在其<几何原本>中提出的欧几里得算法,有称辗转相除法, 具体做法是如果q和r分别是m除以n的商及玉树,m=nq+ ...
- 数组求最大公约数c语言,C语言辗转相除法求2个数的最小公约数
辗转相除法最大的用途就是用来求两个数的最大公约数. 用(a,b)来表示a和b的最大公约数. 有定理: 已知a,b,c为正整数,若a除以b余c,则(a,b)=(b,c). (证明过程请参考其它资料) 例 ...
- python求一个数的因子_求一个整数的所有素数因子的思路是什么?
用筛法. 我们仅考虑分解奇数.(原因?) 现在我们可以假设n=pq,pq必可写作(x+y)(x-y) 也即我们需要找到 x²≡y² (mod n) 我们可以考虑,在 kn 附近的完全平方数 x² 中, ...
- python双素数_Python编程:筛法求两个数之间的素数
要求计算最多10组,每组由两个数m,n构成(1<=m<=n<=1000000000,n-m<100000),要求打印出m,n之间的所有素数(包括m,n),时间限制6s.下面是我 ...
- python求三个数中最小(大)的元素
求最小: def getThreeNumberMin(x,y,z):min=x if x<y else ymin=min if min<z else zreturn min a=getTh ...
- 求两个数之间的素数和
题目内容: 我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推. 现在,给定两个整数n和m,0<n<=m<=200,你的程序要计算第n个素数到第m个素数之间所有的素数的 ...
最新文章
- 高德地图哪个语音包最好_高德地图妲己语音
- android 的view绘制逻辑
- php用存储过程插入数据,如何使用php-webservice使用android中的存储过程将数据插入sql数据库[duplicate]...
- linux内核设计与实现看不懂,Linux内核设计与实现读书笔记
- php MySQL定义,PHP + MySQL用户定义函数
- Android2D绘图二
- C++基础知识总结----类的进阶知识点
- 如何进入Dos窗口以及了解常用Dos命令
- gmp新附录 计算机系统,GMP新附录:计算机系统.doc
- 修改dataV轮播表背景图
- 【EntityFramework CodeFirst 】错误解析:LINQ to Entities does not recognize the method ToString
- 支付宝木马安卓短信窃取者分析
- IDEA环境下yml文件不显示小绿叶(不被识别为配置文件)
- windows7打不开html文件格式,mht是什么文件?Win7打不开mht格式文件的解决办法
- c语言编译器提示隐式声明,在C中使用“隐式声明功能”警告有什么含义?
- java之等差素数的求法
- ESP8266-Arduino编程实例-TEMT6000环境光传感器驱动
- 肠道菌群与睡眠的双向桥接
- python数据分析入门学习笔记
- 病毒木马查杀实战第023篇:MBR病毒之引导区的解析
热门文章
- bugku 做个游戏
- 利用python和matlab求解简单的线性规划问题
- Win10搭建星际争霸2SC2LE环境
- windows7 旗舰版 IIS设置
- JS错误:Mixed Content: The page at ‘https://XXX’ was loaded over HTTPS, but requested an insecure 新的问题
- 入驻京东MCN机构详细流程
- 复制浏览器控制台数据的小技巧
- Navicat:设置Oracle数据库主键自增
- 广州计算机应用技术研究所,「广州中科院软件所」
- python统计英文单词出现次数并把结果生成字典