Python 3.x 模循环在23阶乘处失败
下面的代码一直工作到22!但是失败了23 你能看到任何会导致意外结果的舍入吗 它的作用:Python 3.x 模循环在23阶乘处失败,python-3.x,factorial,Python 3.x,Factorial,下面的代码一直工作到22!但是失败了23 你能看到任何会导致意外结果的舍入吗 它的作用: FindTime-->返回素数列表 因子-->计算“num!”(因子) 分解-->返回一个字符串(一个等式),显示与阶乘结果相等的素数乘积 def findprimes(num): nonprimes=[0,1] for i in range(num+2): for k in range((i)): if(i+2)%(k+2)==0: nonprime
FindTime-->返回素数列表
因子-->计算“num!”(因子)
分解-->返回一个字符串(一个等式),显示与阶乘结果相等的素数乘积
def findprimes(num):
nonprimes=[0,1]
for i in range(num+2):
for k in range((i)):
if(i+2)%(k+2)==0:
nonprimes.append(i+2)
return [c for c in range(i) if c not in set(nonprimes)]
def factor(num):
factorial=1
for i in range(num):
factorial=factorial*(i+1)
return factorial
def breakdown(num):
answer=[]
iter_me=findprimes(num)
remains=factor(num)
for i in range(len(iter_me)):
k=0
tot=0
while remains%iter_me[i]==0:
remains=int(remains/iter_me[i])
k+=1
if k>1:
# print(k)
answer.append(str(str(iter_me[i])+'^'+str(k)+' * '))
else:
answer.append(str(str(iter_me[i])+' * '))
return ''.join(answer).rstrip('* ')
#breakdown lower that 23 works!!!
print(breakdown(23))
应该是
remains=int(remains//iter_me[i])
您遇到了什么错误?回答错误:)打印(细目(25))应返回“2^22*3^10*5^6*7^3*11^2*13*17*19*23“为什么这很重要?
/
在python中的意思是,这意味着它将被取整。例如10/4=2.5
vs10//4=2
。所以,当OP说它只适用于小于23的数字时,我感觉它和除法有关。也许其他人能解释清楚为什么这很重要…太棒了,谢谢!虽然我不相信“它为什么会起作用”@LeeGaines:我知道/
的意思,但int()
也有floor,所以应该是多余的。换句话说,int(10/4)
是2,正如int(10//4)
是2。在第一次迭代中:x_剩余=7755605016665493027651584
with/y_剩余=7755605016665492992000000
with//code>int(x_剩余)==int(y_剩余)
返回False
remains=int(remains//iter_me[i])