Python の倍数について質問があります。プログラムに特定の数の倍数を印刷させる方法を知っている人はいますか? たとえば、「10」と入力した場合、「1,10,2,5」またはそれらの行に沿って何かが表示されるはずですありがとう
質問する
554 次
2 に答える
2
非常に単純に、n(10) までのすべての数値をテストできます。
n = 10
results = []
for i in range(1,n+1):
if n % i == 0:
results.append(i)
print(results)
またはリスト内包表記として:
n = 10
print([x for x in range(1,n+1) if n % x == 0])
しかし実際には、n の 2 乗までしかテストする必要がありません。シンプルなジェネレーターを使用する:
def divisor(n):
a = 1
l = n ** 0.5
while a <= l:
if n % a == 0:
if a == n//a:
yield a,
else:
yield a, n//a
a += 1
print([x for a in divisor(10) for x in a])
print(sorted(x for a in divisor(10) for x in a)) # Sorted
于 2013-09-16T01:40:38.800 に答える
1
どうぞ:
from collections import defaultdict
from math import sqrt
def factor(n):
i = 2
limit = sqrt(n)
while i <= limit:
if n % i == 0:
yield i
n = n / i
limit = sqrt(n)
else:
i += 1
if n > 1:
yield n
def factorGenerator(n):
d=defaultdict(int)
for f in factor(n):
d[f]+=1
return [(e,d[e]) for e in sorted(d.keys())]
def divisorGen(n):
factors = factorGenerator(n)
nfactors = len(factors)
f = [0] * nfactors
while True:
yield reduce(lambda x, y: x*y, [factors[x][0]**f[x] for x in range(nfactors)], 1)
i = 0
while True:
f[i] += 1
if f[i] <= factors[i][1]:
break
f[i] = 0
i += 1
if i >= nfactors:
return
print list(divisorGen(10))
版画:
[1, 2, 5, 10]
于 2013-09-16T01:41:40.760 に答える