我编写了一个程序来解决n th 自守数(当平方时,数字以原始数字结束(例如625 2 = 390625,390625 %1000 = 625)。
import time
def green(n):
start_time = time.time()
f = 3
if n==1:
return 1
elif n==2:
return 5
elif n==3:
return 6
n1 = "5"
n2 = "6"
tempn2 = "0"
tempn1 = "0"
x = 1
while f!=n+1:
if int(n1) > int(n2):
tempn2 = str(x) + n2
while int(pow(int(tempn2), 2, 10**(len(tempn2)))) != int(tempn2):
tempn2 = str(x) + n2
x+=1
x=1
f+=1
n2 = tempn2
if f==n+1:
break
else:
tempn1 = str(x) + n1
while int(pow(int(tempn1), 2, 10**len(tempn1))) != int(tempn1):
tempn1 = str(x) + n1
x+=1
x=1
f+=1
n1 = tempn1
print("--- %s seconds ---" % (time.time() - start_time))
return min(int(n1), int(n2))
对于糟糕的代码感到抱歉,第一年Comp Sci。
我需要5000 th 输入小于12秒的运行时间。当前代码大约需要45秒。
答案 0 :(得分:0)
代码
for f in range(1, n//2):
ten_power = next_power # Keep track of length in digits
next_power *= 10
# "old5" is the previous automorphic number ending in 5
for digit in range(9, 0, -1):
new5 = old5 + digit * ten_power
new5sq = new5*new5
if new5sq % next_power == new5:
# you found the number
old5 = new5
break
您可以将这些内容用于现有代码吗?请注意,外部for
循环具有不同的控件;找到两个 n//2
次的5和6号码。你唯一关心较小的一个是在奇数n
的最后一次迭代。
这在1.5秒内找到green(5000)
。
答案 1 :(得分:0)
只需几微秒的时间 代码
n=int(input('Enter any no.'))
temp=n
div=1
while temp>=1:
temp=temp//10
div=div*10
x=n**2
y=x%div
if n==y:
print(' Automorphic')
else:
print(' Not Automorphic')
甜美简单!