我做了一个程序,找到一个带有测试用例的数字的除数,然后在在线评判中提交它,所以我写了这样的代码
num_case=int(raw_input())
num=list()
final_o=[]
for x in xrange(num_case):
num.append(int(raw_input()))
for h in num:
result=[int(h)]
for i in xrange(1, h + 1):
if h % i == 0:
result.append(i)
a=final_o.append(len(result)-1)
for ff in final_o:
print ff
在这种情况下,我让用户输入例3的测试用例的数量,然后输入例如12 7和36的数字,然后他得到像这样的输出6 2 9,12有6个除数,依此类推代码工作得很好,但我提交内存错误,所以我尝试使用itertools因为for循环的范围很小,xrange需要大量的时间超过2秒,但我没有得到任何输出代码
from itertools import count
num_case=int(raw_input())
num=list()
final_o=[]
for x in xrange(num_case):
num.append(int(raw_input()))
for h in num:
result=[int(h)]
n=int(raw_input())
for i in count(1):
if n % i == 0:
result.append(i)
elif count==n+1:
break
a=final_o.append(len(result)-1)
for ff in final_o:
print ff
任何人都有这个bug的解决方案吗?请注意,测试用例2秒的时间和数字的范围是10 ^ 9和测试用例100我是如何做到的?
答案 0 :(得分:1)
def devisors_number(n):
result = 0
sqrt_n = int(n**0.5)
for i in xrange(1, sqrt_n + 1):
if n % i == 0:
result += 1
result *= 2
if sqrt_n**2 == n:
result -= 1
return result
n = int(raw_input("Enter a number: "))
d = devisors_number(n)
print "{0} has {1} devisors".format(n, d)