对于 python 中的 t 个测试用例,找出数字的除数总数
find total number of divisors of number, for t test cases in python
我做了一个程序来找到一个数字的除数,并用测试用例提交给在线法官,所以我写了这样的代码
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
有人有解决此错误的方法吗?请注意,测试用例 2 秒的时间和数字范围是 10^9,测试用例 100 我该怎么做?
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)
我做了一个程序来找到一个数字的除数,并用测试用例提交给在线法官,所以我写了这样的代码
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
有人有解决此错误的方法吗?请注意,测试用例 2 秒的时间和数字范围是 10^9,测试用例 100 我该怎么做?
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)