使用 python 在 SPOJ 中超出了时间限制
Time limit exceeded in SPOJ using python
我正在尝试在 SPOJ 上解决这个问题,https://www.spoj.com/problems/LASTDIG/,我确信代码是正确的,但是当我在网站上提交它时,它显示超过了时间限制,
问题的解决代码是:
t=int(input()) #for test cases
for i in range(0,t):
x,y=input().split() #for two seperate input
a=int(x)
b=int(y)
if 0<=a<=20 and 0<=b<=2147483000: #conditions for input
z=x**y
c=str(z)
print(c[-1]) #finally to print the last digit of the number
我怀疑是不是程序太简单了,需要大量的输入?那么,任何人都可以建议如何改进解决方案,还是我需要选择其他语言,如 C++?
这不是 python 因为你得到 TLE,这是因为你申请这个问题的方法。
您可以使用一种叫做 Binary Exponentiation 的技巧来解决这个问题。
从 here 了解它并尝试自己编写解决方案。
代码:
# calculates (x ^ y) % m using binary exponentiation
def binpow(x, y, m) :
x = x % m
ans = 1
while y > 0 :
if y % 2 == 1 :
ans = (ans * x) % m
x = (x * x) % m
y = y >> 1
return ans
for _ in range(int(input())) :
a, b = map(int, input().split())
print(binpow(a, b, 10))
我正在尝试在 SPOJ 上解决这个问题,https://www.spoj.com/problems/LASTDIG/,我确信代码是正确的,但是当我在网站上提交它时,它显示超过了时间限制,
问题的解决代码是:
t=int(input()) #for test cases
for i in range(0,t):
x,y=input().split() #for two seperate input
a=int(x)
b=int(y)
if 0<=a<=20 and 0<=b<=2147483000: #conditions for input
z=x**y
c=str(z)
print(c[-1]) #finally to print the last digit of the number
我怀疑是不是程序太简单了,需要大量的输入?那么,任何人都可以建议如何改进解决方案,还是我需要选择其他语言,如 C++?
这不是 python 因为你得到 TLE,这是因为你申请这个问题的方法。 您可以使用一种叫做 Binary Exponentiation 的技巧来解决这个问题。 从 here 了解它并尝试自己编写解决方案。
代码:
# calculates (x ^ y) % m using binary exponentiation
def binpow(x, y, m) :
x = x % m
ans = 1
while y > 0 :
if y % 2 == 1 :
ans = (ans * x) % m
x = (x * x) % m
y = y >> 1
return ans
for _ in range(int(input())) :
a, b = map(int, input().split())
print(binpow(a, b, 10))