所以我的任务是: 如果所有因子的总和为n + 1,则数字n称为稀 number,n,如果其所有因子的总和大于3 * n,则称为fat。 一个数字n被称为杰克斯普拉特,如果它既瘦又下 数字,n + 1是胖的。
我必须要求用户输入一个数字,我必须说它是瘦,胖还是杰克斯普拉特。我还必须在1秒钟内打印出1到10000个插孔咒语的所有数字。
此程序需要大约10秒才能完成
以下是代码:
def isLean(n, t):
if t == n + 1:
return True
else:
return False
def isFat(n, t):
if t > 3*num:
return True
else:
return False
def isJackSprat(n, t, t2):
if t == n+1 and t2 > 3*(n+1):
return True
else:
return False
num = int(input("Please enter a number: "))
total = 0
total2 = 0
total3 = 0
total4 = 0
prime = ""
for factor in range(1,num+1):
if num % factor == 0:
total += factor
for factor in range(1,num+2):
if (num+1) % factor == 0:
total2 += factor
if isLean(num,total) == True:
print ("Lean: Yes")
elif isLean(num,total) == False:
print ("Lean: No")
if isFat(num,total) == True:
print ("Fat: Yes")
elif isFat(num,total) == False:
print ("Fat: No")
if isJackSprat(num, total, total2) == True:
print ("Jack Sprat: Yes")
elif isJackSprat(num, total, total2) == False:
print ("Jack Sprat: No")
print ("These are the Jack Sprat Numbers from 1 - 1000")
for count in range (1,10000):
if count % 2 != 0:
for factor in range (1,count+ 1):
if factor % 2 != 0:
if count % factor == 0:
total3 += factor
for factor in range (1,count+2):
if (count+1) % factor == 0:
total4 += factor
if total3 == (count + 1) and total4 > 3*(count + 1):
prime = prime + str(count) + ", "
total3 = 0
total4 = 0
print (prime[0:len(prime)-2])
如果我能得到一些帮助,我将非常感激
答案 0 :(得分:2)
你的for循环只能达到数字的平方根,你可以大大加快速度。小于平方根的每个因子将具有一个大于平方根的对,因此您可以通过迭代到平方根来找到所有因子。
答案 1 :(得分:0)
尝试像Eratosthenes的筛子一样,但是不是布尔数组而是交叉,有一个int数组,每个索引建立其因子的总和。我刚刚这样做了,大约需要0.05秒才能找到所有Jack Sprat数字达到10000(与您的代码相同)。