Python-三角形和自恋数函数
代码需要返回数字是否为三角形以及是否为自恋者的函数。 主要功能:Python-三角形和自恋数函数,python,logic,Python,Logic,代码需要返回数字是否为三角形以及是否为自恋者的函数。 主要功能: def main(): playing = True while playing == True: num_input = input('Give me a number from 1 to 10000. Type -1 to exit. ') try: num = int(num_input) if (num == -1): playing = F
def main():
playing = True
while playing == True:
num_input = input('Give me a number from 1 to 10000. Type -1 to exit. ')
try:
num = int(num_input)
if (num == -1):
playing = False
continue
if (num <= 0 or num > 10000):
continue
factors = getFactors(num)
print("The factors of", num, "are", factors)
if isTriangular(num):
print(str(num) + ' is triangular')
if isNarcissistic(num):
print(str(num) + ' is narcissistic')
三角形数N是一个整数,其中有另一个整数x,其中x(x+1)/2=N 所以你需要把这个关系颠倒过来,从N中求出x的值,然后检查x是否是一个整数 使用二次根函数
(-b+√(b^2-4ac))/2a
在关系x^2/2+x/2-N=0的规范版本上,
我们得到x=(√(8N+1)-1)/2
因此,您可以通过从N计算x并检查它是否为整数来实现isTriangular:
def isTriangular(N):
x = ((8*N+1)**0.5-1)/2
return int(x) == x
或者,您可以逐个检查x的值,直到达到或超过N。这是一个指数级的过程,因此不需要花费太多时间(并且您不必担心平方根的舍入问题)
def isTriangular(N):
x = ((8*N+1)**0.5-1)/2
return int(x) == x
def isTriangular(N):
x = n = 1
while n < N:
x += 1
n = x*(x+1)//2
return n == N
def isNarcissist(N):
digits = [int(c) for c in str(N)]
return N == sum(d**len(digits) for d in digits)