查找python中t个测试用例的除数总数

时间:2015-11-05 14:35:52

标签: python python-2.7 loops itertools

我做了一个程序,找到一个带有测试用例的数字的除数,然后在在线评判中提交它,所以我写了这样的代码

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我是如何做到的?

1 个答案:

答案 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)