「@Author:Runsen」

编程的本质来源于算法,而算法的本质来源于数学,编程只不过将数学题进行代码化。「---- Runsen」

先问你们一个小学问题:「什么是质因数?小学是对一个数进行分解质因数」

上次,我介绍了短除法,短除法其实是一种分解质因数的方法。

比如,12分解质因数为2*2*3,20分解质因数为2*2*5,

合数

合数是指在大于1的整数中除了能被1和本身整除外,还能被其他数(0除外)整除的数。与之相对的是质数,而1既不属于质数也不属于合数。最小的合数是4。

每个合数都可以写成几个质数相乘的形式,其中每个质数都是这个合数的因数,把一个合数用质因数相乘的形式表示出来,叫做分解质因数。如30=2×3×5 。分解质因数只针对合数。

合数分解质因数

把一个合数分解成若干个质因数的乘积的形式,即求质因数的过程叫做分解质因数。

分解质因数只针对合数。(分解质因数也称分解素因数)求一个数分解质因数,要从最小的质数除起,一直除到结果为质数为止。分解质因数的算式叫短除法,和除法的性质相似,还可以用来求多个数的公因式。

将需要分解的数字从2开始遍历,则分解的结果都会是质数。需要分解的数字是每一次上次分解之后的结果。比如,90有质因数2,之后用45分解质因数3,会得到15,15再去分解质因数3,最终得到的结果是:90=2*3*3*5。

L = []

num = int(input('请输入需要分解的数字:'))

for i in range(2,num):

while True:

if num%i == 0:

L.append(i)

num = num / i

else:

break

st = str(num)+'='

for i in L:

st = st + str(i) + '*'

print(st[:-1])

请输入需要分解的数字:90

90=2*3*3*5

下面将Python代码转化为Java代码

import java.util.Scanner;

/**

* @author Runsen

* @date 2020/12/9 13:18

*/

public class Decomposing_prime{

public static void main(String[] args){

Scanner Sc = new Scanner(System.in);

System.out.print("请您输入一个数:");

int n = Sc.nextInt();

for (int i = 2; i <= n; i++) {

while (n % i == 0 && n != i) {

n /= i;

System.out.print(i + "*");

}

if (n == i) {

System.out.print(i);

break;

}

}

}

}

整合最小公倍数和最大公约数

下面对之前的最小公倍数和最大公约数,使用第四种方法分解质因数求出,

数字24 [2,2,2,3]和数字18 [2,3,3]的最大公约数就是两者质因数列表的所有公共部分,也就是6 [2,3]。因此问题就转化为取出[2,3]。

但是不能采用如下的算法计算:

a = [2,2,2,3]

b = [2,3,3]

c = []

for x in a:

if x in b:

c.append(x)

print(c) #[2,2,2,3] 不是[2,3]

显然这是错误的算法,正确的计算方法是,一旦进入了c列表的数字就应该从a列表和b列表中删除掉,避免重复计算。

a = [2,2,2,3]

b = [2,3,3]

c = []

while len(a):

x = a[0]

if x in b:

c.append(x)

b.remove(x)

a.remove(x)

print(c) #[2, 3]

根据质因数列表24 [2,2,2,3]和18 [2,3,3]

则计算24*18之积实际就是列表做加法[2,2,2,3]+[2,3,3]得到[2,2,2,2,3,3,3]

做除法,就是从[2,2,2,2,3,3,3]去除掉除数的质因数列表即可

24和18的最大公约数是[2,3],则最小公倍数就是从[2,2,2,2,3,3,3]去掉[2,3]

最终得到[2,2,2,3,3]就是最小公倍数。

遗憾的是,python中的列表不支持减法,也就是没有[2,2,2,2,3,3,3] - [2,3]这样的操作

但是两个列表之间能做加法,因此在做加法之前,先从一个列表中把两个列表中都有的可以成为公约数的内容从一个列表中删除掉,然后再让两个列表做加法即可,具体代码如下。

a = [2,2,2,3]

b = [2,3,3]

c = []

#求最小公倍数

for x in a:

if x in b:

b.remove(x)

c = a+b

c #[2, 2, 2, 3, 3]

因此得到最终的短除法求最小公倍数和最大公约数代码。

'''

@Author:Runsen

@WeChat:RunsenLiu

@微信公众号:Python之王

@CSDN:https://blog.csdn.net/weixin_44510615

@Github:https://github.com/MaoliRUNsen

@Date:2020/12/9

'''

def Decomposing_prime(num):

# 分解质因数

L = []

for i in range(2, num):

while True:

if num % i == 0:

L.append(i)

num = num / i

else:

break

return L

def f1(a,b):

# 求最大公约数的质因数

c = []

while len(a):

x = a[0]

if x in b:

c.append(x)

b.remove(x)

a.remove(x)

return c

def f2(a,b):

# 求最小公倍数的质因数

for x in a:

if x in b:

b.remove(x)

c = a + b

return c

def get_res(L):

result = 1

for i in L:

result = result * i

return result

if __name__ == '__main__':

x = int(input('请输入一个数字:'))

y = int(input('请输入一个数字:'))

res1 = f1(Decomposing_prime(x),Decomposing_prime(y))

res2 = f2(Decomposing_prime(x),Decomposing_prime(y))

print('最大公约数:' + str(get_res(res1)))

print('最小公倍数:' + str(get_res(res2)))

请输入一个数字:12

请输入一个数字:14

最大公约数:2

最小公倍数:84

本文已收录 GitHub,传送门~[1] ,里面更有大厂面试完整考点,欢迎 Star。

Reference

[1]

传送门~: https://github.com/MaoliRUNsen/runsenlearnpy100

python编写判断素数的函数并找出前五个摩尼森数_五十八、如何对一个数进行分解质因数...相关推荐

  1. python编写判断素数的函数isprime_Python 判断是否为质数或素数的实例

    一个大于1的自然数,除了1和它本身外,不能被其他自然数(质数)整除(2, 3, 5, 7等),换句话说就是该数除了1和它本身以外不再有其他的因数. 首先我们来第一个传统的判断思路: def handl ...

  2. 如何在10亿个整数中找出前1000个最大的数?

    作者:vincent-duan,专注 Java,沉迷开源,架构师社区合伙人! 面试题目:如何在10亿个整数中找出前1000个最大的数. 我们知道排序算法有很多: 冒泡算法:通过两层for循环,外层第一 ...

  3. 如何在10亿个整数中找出前1000个最大的数(TopN算法)

    面试题目:如何在10亿个整数中找出前1000个最大的数. 我们知道排序算法有很多: 冒泡算法:通过两层for循环,外层第一次循环找到数组中最大的元素放置在倒数第一个位置,第二次循环找到第二大的元素放置 ...

  4. 找出最大和第二大的数PHP,2020-09-01 十大经典排序算法总结php为例

    排序算法说明 1 .排序的定义 对一序列对象根据某个关键字进行排序. 2.术语说明 稳定 :如果a原本在b前面,而a=b,排序之后a仍然在b的前面: 不稳定 :如果a原本在b的前面,而a=b,排序之后 ...

  5. 从十亿个数中找出前1000个最大的数的算法

    10亿个数中找出1000个最大的数的算法思路: 1,先拿出前1000个数字,并排序,找出最小值为 minValue .    2,  然后再依次拿出1000个数字,找出最大值为 tempMaxValu ...

  6. python判断素数的函数_使用Python判断质数(素数)的简单方法讲解

    质数又称素数.指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数.素数在数论中有着很重要的地位.比1大但不是素数的数称为合数.1和0既非素数也非合数.质数是与合数相对立的两个概念 ...

  7. C语言基础课 编写程序之1.编写一个判断素数的函数,并利用该函数输出100~200的所有素数2.编写一个函数fun(),函数功能是:判断一个整数是否既是5又是7的整倍数,若是,输出yes,不是,输出n

    1.编写一个判断素数的函数,并利用该函数输出100~200的所有素数 #include<stdio.h> #include<math.h> int fun(int n) {in ...

  8. 编写一个判断素数的函数,在主函数输入一个整数时,输出是否素数的信息。

    原文地址为: 编写一个判断素数的函数,在主函数输入一个整数时,输出是否素数的信息. 代码: 1 #include<iostream> 2 #include<cmath> 3 u ...

  9. ACMNO.23 C语言-素数判定 写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的消息。 输入 一个数 输出 如果是素数输出prime 如果不是输出not prime

    题目描述 写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的消息. 输入 一个数 输出 如果是素数输出prime 如果不是输出not prime 样例输入 97 样例输出 prime 来源/ ...

最新文章

  1. struts+spring+hibernate总结
  2. 获取表中的某个字段名
  3. tcp通讯一次最多能发送多少数据?_关于TCP/IP,必须知道的十个知识点
  4. java读取各类型的文件
  5. 开发人员为什么要学会画技术架构图?
  6. python 身份证识别_Card-Ocr:身份证识别 OCR
  7. 没有电脑没有手机没有网络没有爱情——纪念我的电子科技大学九里堤校区大一生活
  8. windows7系统安装中文语言包汉化问题
  9. windows补丁下载说明
  10. ubuntu运行迅雷极速版
  11. C++ 使用Poco库进行文件操作
  12. Linux0.11内核--进程的调度(就绪态和运行态之间的转换)
  13. css3魔方3乘3每层旋转_学习做旋转魔方 (css3)
  14. JavaScript 数组:数组中重复的数字【思路与知识点总结与扩展】
  15. B4:Unity制作Moba类游戏——小兵AI系统
  16. 对微软CRM日期保存格式的分析
  17. 【2023】金融市场基本知识
  18. Microsoft Virtual PC2007的安装配置
  19. 大数据工程师必备技能
  20. 无敌寂寞的系统一键重装软件推荐!

热门文章

  1. 围棋博弈程序的实现与思考(4)——棋盘的数据结构
  2. 【源码+图片素材+详细教程】Java游戏开发_Java开发经典游戏飞翔的小鸟_飞扬的小鸟_Java游戏项目Flappy Bird像素鸟游戏_Java课程设计项目
  3. 有哪些IT初学者(新人)成长为技术大牛的真实经历?
  4. Hi-C Data Browser:Hi-C数据浏览器
  5. 转:深度学习斯坦福cs231n 课程笔记
  6. Android https 自签名和CA证书验证(基于OkHttp)
  7. 系统架构中常见问题及解决方案
  8. 两台计算机组装在一起,好看又实用 手把手教你把两台电脑装在一起
  9. android百度导航demo,Android - 百度导航Demo,我们一起来踩坑!
  10. elasticsearch SSL 证书过期解决办法