确定两个数之间有一定因数的整数个数
Determining the number of integers with a certain amount of factors between two numbers
我想实现一个函数,它将三个参数(x、低、高)作为输入 - 所有整数,并找到 x
因子介于 low
和high
。例如,有多少个 50 到 100 之间的整数有 4 个因子?
我的代码如下:
def n_factors(x, lower, upper):
""" Find how many integers have x (user-specified)
factors from - lower to upper - (user-specified) """
int_counter = 0 # integer counter
div_count = 0 # divisor counter
for i in range(lower, upper+1):
for j in range(2, i):
if (i%j)==0:
div_count += 1
if (div_count == x):
print i
int_counter += 1
return int_counter
当我尝试 运行 时,我得到了不正确的结果,例如
n_factors(2,10,20)
10
11
2
这应该列出 10 到 20 之间的四个质数,如果
该功能有效但无效。非常感谢任何帮助!
您需要在每次迭代结束时将 div_count
设置回零:
def n_factors(x, lower, upper):
int_counter = 0 # integer counter
div_count = 0 # divisor counter
for i in range(lower, upper+1):
for j in range(1, i + 1):
if (i%j)==0:
div_count += 1
if div_count == x:
print i
int_counter += 1
div_count = 0
return int_counter
def n_factors(x, lower, upper):
facs = {}
for f in range(1, int(upper**0.5)+1):
for n in range(lower+f-(lower%f), upper+1, f):
if n not in facs: facs[n] = []
facs[n].append(f)
for n, numFacs in facs.items():
if len(numFacs) != x: continue
print(n)
def n_factors(x, lower, upper):
""" Find how many integers have x (user-specified)
factors from - lower to upper - (user-specified) """
int_counter = 0
div_count = 0
for i in range(lower, upper+1):
for j in range(1, i+1):
if (i%j)==0:
div_count += 1
if (div_count == x):
print i
int_counter += 1
div_count = 0
return int_counter
你可以通过在稍微高一点的水平上编码来轻松避免这样的错误。
当你需要数"how many times does this condition happen"的时候,你不需要手动设置计数器忘记重新设置——你可以把那句话相当直接地翻译成Python;这里的条件是“j
除 i
没有余数”:
for i in range(lower, upper+1):
div_count = sum(i%j == 0 for j in range(1,i+1))
我想实现一个函数,它将三个参数(x、低、高)作为输入 - 所有整数,并找到 x
因子介于 low
和high
。例如,有多少个 50 到 100 之间的整数有 4 个因子?
我的代码如下:
def n_factors(x, lower, upper):
""" Find how many integers have x (user-specified)
factors from - lower to upper - (user-specified) """
int_counter = 0 # integer counter
div_count = 0 # divisor counter
for i in range(lower, upper+1):
for j in range(2, i):
if (i%j)==0:
div_count += 1
if (div_count == x):
print i
int_counter += 1
return int_counter
当我尝试 运行 时,我得到了不正确的结果,例如
n_factors(2,10,20)
10
11
2
这应该列出 10 到 20 之间的四个质数,如果 该功能有效但无效。非常感谢任何帮助!
您需要在每次迭代结束时将 div_count
设置回零:
def n_factors(x, lower, upper):
int_counter = 0 # integer counter
div_count = 0 # divisor counter
for i in range(lower, upper+1):
for j in range(1, i + 1):
if (i%j)==0:
div_count += 1
if div_count == x:
print i
int_counter += 1
div_count = 0
return int_counter
def n_factors(x, lower, upper):
facs = {}
for f in range(1, int(upper**0.5)+1):
for n in range(lower+f-(lower%f), upper+1, f):
if n not in facs: facs[n] = []
facs[n].append(f)
for n, numFacs in facs.items():
if len(numFacs) != x: continue
print(n)
def n_factors(x, lower, upper):
""" Find how many integers have x (user-specified)
factors from - lower to upper - (user-specified) """
int_counter = 0
div_count = 0
for i in range(lower, upper+1):
for j in range(1, i+1):
if (i%j)==0:
div_count += 1
if (div_count == x):
print i
int_counter += 1
div_count = 0
return int_counter
你可以通过在稍微高一点的水平上编码来轻松避免这样的错误。
当你需要数"how many times does this condition happen"的时候,你不需要手动设置计数器忘记重新设置——你可以把那句话相当直接地翻译成Python;这里的条件是“j
除 i
没有余数”:
for i in range(lower, upper+1):
div_count = sum(i%j == 0 for j in range(1,i+1))