鱼C论坛

 找回密码
 立即注册
查看: 2273|回复: 4

定义函数

[复制链接]
发表于 2019-12-17 09:16:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
编写函数,返回一个整数的素数因子。
素数也会,因子也会,但是怎么嵌套呢,
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-12-17 10:10:30 | 显示全部楼层
本帖最后由 wp231957 于 2019-12-17 10:39 编辑

  1. def isprime(n):              
  2.     ret = False              
  3.     if(n > 1):               
  4.         ret = True         
  5.         for k in range(2 , n):
  6.             if not (n % k):  
  7.                 ret = False  
  8.                 break        
  9.     return ret           

  10. def yinzi(n):
  11.   ret=[]
  12.   for x in range(1,n+1):
  13.      if not n%x: ret.append(x)
  14.   return ret   


  15. for x in range(2,100):
  16.     print(x,"包含素数因子,分别是:",end="")
  17.     lst=yinzi(x)
  18.     for k in lst:
  19.       if isprime(k):
  20.         print(k,' ',end="")  
  21.     print()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-17 10:41:04 | 显示全部楼层
原来,不用判断一个正整数 是否包含素数因子(0,1除外)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-17 11:26:46 | 显示全部楼层
嗯,这个过程吧,叫做分解质因数
分解到最后,不管途径是什么,结果必然是一样的组合,最多是顺序上的不同。
  1. >>> def split(num:int)->list:
  2.         if num < 3:
  3.                 return [num]
  4.         res = []
  5.         while num > 1:
  6.                 div = 2
  7.                 while num % div:
  8.                         div += 1
  9.                 res.append(div)
  10.                 num //= div
  11.         return res

  12. >>> split(351)
  13. [3, 3, 3, 13]
  14. >>> split(361)
  15. [19, 19]
  16. >>> split(17)
  17. [17]
  18. >>>
复制代码

别问我为啥没有 1 。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-17 11:43:01 | 显示全部楼层
  1. import math

  2. def prime(n):
  3.     ret = False
  4.     if n > 1:
  5.         ret = True
  6.         for x in range(2 , int(math . sqrt(n)) + 1):
  7.             if n % x == 0:
  8.                 ret = False
  9.                 break
  10.     return ret

  11. def fact(n):
  12.     for k in range(2 , int(math . sqrt(n)) + 1):
  13.         if n % k == 0:
  14.             e = n // k
  15.             if prime(k) and k not in d:
  16.                 d . append(k)
  17.             elif prime(e) and e not in d:
  18.                 d . append(e)
  19. d = []
  20. fact(2618916300)
  21. print(d)
复制代码

        运行实况:
C:\Bin>python x.py
[2, 3, 5, 7, 11, 13, 17, 19]

C:\Bin>
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-1-21 09:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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