微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

问题是找到 1 到 num 中的两个数字相乘成为 num

如何解决问题是找到 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?