分解质因数
大佬们,我正在写一个分解质因数的代码,我把自己都写蒙了我现在的思路是:写两个函数,一个用来获取因数,另一个人用来判断是不是质数,如果是那就把那个数加到一个列表里,如果不是就用那个数作为参数在运行第一个函数
这是我现在的代码:
zhishu = []
def zs(g):
for z in range(2,g):
if num%z == 0:
d = True
break
else:
d = False
if d:
zhishu.append(g)
else:
zys(g)
def zys(n):
for yinshu in range(2,n):
if num%yinshu == 0:
zs(yinshu)
else:
zys(v)
print('\n---------------------------分解质因数---------------------------\n')
num = int(input('请输入一个数字:'))
v = num
zys(v)
print(zhishu)
我感觉是zys这个函数有些问题,求大佬指点 最直接(暴力)的思路:
例如
求20的质因数,找到2并存储2,然后20除找到的质因数(2)等于10。
求10的质因数,找到2并存储2,然后10除找到的质因数(2)等于5。
求5的质因数...循环上述步骤
def zys(num): #求质因数
while num > 1:
for yinshu in range(2,num+1):
if num % yinshu == 0:
zhiyinshu.append(yinshu)
break
num //= yinshu
def show_zys(): #显示质因数
print(str(num) + ' = ', end = '')
for i in range(len(zhiyinshu)):
if i != len(zhiyinshu) - 1:
print(str(zhiyinshu) + '×', end = '')
else:
print(zhiyinshu)
zhiyinshu = []
num = int(input('请输入一个数字:'))
zys(num)
show_zys()
结果
请输入一个数字:20
20 = 2×2×5
请输入一个数字:23
23 = 23 yin = []
def zys(n):
for yinshu in range(2,n+1):
if n % yinshu == 0 andyinshu != n:
h = n // yinshu
yin.append((yinshu,h))
elif yin == [] and yinshu == n:
print('此为质数')
if yin != []:
for each in yin :
print(each)
print('\n---------------------------分解质因数---------------------------\n')
num = int(input('请输入一个数字:'))
zys(num)
想说,只需要一个函数就能解决的问题,没必要搞的太复杂,可以先写一下思维导图或具体思路吧
def intFactorization(n: int, /) -> list:
if isinstance(n, int) and n>0:
res=[]
while not n&1:
n>>=1
res.append(2)
temp=3
maximum=floor(sqrt(n))
while temp<=maximum:
if not n%temp:
while not n%temp:
n//=temp
res.append(temp)
maximum=floor(sqrt(n))
temp+=2
if n!=1:
res.append(n)
return res num = int(input("请输入一个合数:"))
n = num
list1 = []#存放质因数
for j in range(int(n/2)+1):
for i in range(2,n):
if num % i == 0:#可以整除
list1.append(i)
num = num // i
break
if len(list1) == 0:
print("此数是是质数,请重新输入另一个数")
exit()
#print(list1)
print('%d = '%(n),end='')
for i in range(len(list1)):
if i== len(list1)-1:
print('%s' % (list1))
else:
print('%s * ' % (list1),end='')
兔子BUNNY 发表于 2020-4-25 09:31
先给一下建议:
1.变量在使用前一定要定义,要学会看红色的错误提醒
2.函数是封装的,所以要使用内置的参 ...
你说的第4点不对,那叫递归。 while 1:
num = int(input('输入一个数'))
def num_split(number):
k = []#用来存放被拆分的数
while True:
for i in range(2,number+1):#在2到number 查找
if number %i == 0:
k.append(i)
number = int(number/i) #被i进行拆分
break
if number<=1:#当for 遍历已经挑不到的时候退出
break
return k
print(num_split(num))
沐羽尘 发表于 2020-4-24 23:47
想说,只需要一个函数就能解决的问题,没必要搞的太复杂,可以先写一下思维导图或具体思路吧
你这个好像不对啊{:10_297:} 永恒的蓝色梦想 发表于 2020-4-25 07:22
第一行和第六行的语法我都不明白啊{:10_266:}
-> 是语法么?
还有这个 >>= WangJS 发表于 2020-4-25 10:55
你这个好像不对啊
本来这个函数判断输入是否为质数,不是的话返回一个包含其因数的列表
看了一下最佳答案是要求返回的所有数都是质数
emmm这也不难
def resolve(x):
try:
assert x > 1
zhi = []
z = x
while x > 1:
for each in range(2,x+1):
if x % each == 0 :
zhi.append(each)
x = x // each
break
if len(zhi) > 1 :
h =''
for each in zhi:
h += ' '+str(each)+' '+'*'
h = h[:len(h)-1] + '='+' '+str(z)
return h
else:
return'此为质数'
except AssertionError:
return'请不要输入不正确的数'
x = int(input('请输入大于1的整数:'))
y = resolve(x)
print(y)
结果如下请输入大于1的整数:11
此为质数
请输入大于1的整数:12
2 * 2 * 3 = 12
请输入大于1的整数:0
请不要输入不正确的数
要是没有bug就不用回我了,就酱紫 质因数 返回的不是 质数和幂次吗? 比如9 写作3^2 那么返回3 3不符合质因数分解要求,质因数分解要求 每个质数只出现一次,幂次可以不是1
比如 20 = (2^2)x(5^1)这个才是质因数分解的结果 WangJS 发表于 2020-4-25 10:57
第一行和第六行的语法我都不明白啊
-> 是语法么?
-> 是注释,代表返回值
>>=1 就是 //=2 TJBEST 发表于 2020-4-25 17:51
质因数 返回的不是 质数和幂次吗? 比如9 写作3^2 那么返回3 3不符合质因数分解要求,质因数分解要求 每个 ...
我们小学没要求这个{:10_250:} for i in range(len(zhiyinshu)):
if i != len(zhiyinshu) - 1:
print(str(zhiyinshu) + '×', end = '')
else:
print(zhiyinshu)
最佳答案的第二部分没看懂啊,有大佬能分步详细解释下吗
永恒的蓝色梦想 发表于 2020-4-25 18:08
-> 是注释,代表返回值
>>=1 就是 //=2
"->"还会强制转换输出类型 _2_ 发表于 2020-5-7 18:30
"->"还会强制转换输出类型
胡说 永恒的蓝色梦想 发表于 2020-5-7 18:31
胡说
……当我没说
页:
[1]