如何解决问题是找到 1 到 num 中的两个数字相乘成为 num
t=int(input())
while t > 0:
num=int(input())
lst=[]
n=0
for i in range(1,math.floor(math.sqrt(num))+1):
if num%i==0:
lst.append(i)
n=len(lst)
if n == 1:
print(1,num)
else:
print(lst[1],int(num/lst[1]))
t-=1
问题是在 1 to num
中找到两个相乘成为 num
的数字(素数只有 1,num 和其余的任意 2 个因数)。超出时间限制错误是我现在看到的事情。谁能帮我优化一下?
解决方法
您可以通过将范围内的限制更改为 sqrt(num) 来优化代码。我希望这可以解决您的问题。
你可以这样试试:
import math
t= int(input())
while(t>0):
num = int(input())
lst = []
for i in range(1,(math.sqrt(num))+1):
if(num%i == 0):
lst.append((i,num/i))
break
print(lst[0])
t= t-1
,
- 如果您只需要找到任意 2 个因素,则无需使用列表。仅在找到第一个之后
break
。 - 正如评论中所建议的,在
num
之前不需要迭代,因为这些因素将开始重复。迭代到正方形就足够了。 - 最后,您可以利用内置的
divmod
函数来避免计算模数和除法。
from math import sqrt
num = int(input())
for n in range(2,int(sqrt(num)) + 1):
div,mod = divmod(num,n)
if mod == 0:
print(n,div)
break
else:
print(1,num)
- 这使用了
for/else
结构,因此如果没有找到任何因子,将只打印1,num
,这始终为真。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。