Python Problem Set 세 함수는 올바르게 작동하지만 최종 결과를 얻으려면 다음 함수로 이동하기 전에 한 번에 하나씩 실행해야합니다. 개별적으로 쿼리 할 필요없이 세 가지 모두에서 결과를 얻을 수있는 방법이 있습니까?쿼리를 줄이는 함수 결합
>>> import itertools
>>> def prime_factors(value):
if value > 3:
for this in itertools.chain(iter([2]), xrange(3,int(value ** 0.5)+1, 2)):
if this*this > value: break
while not (value % this):
if value == this: break
value /= this
yield this
yield value
>>> prime_factors(315)
generator object prime_factors at 0x01182468>
>>> def prime_factors_mult(n):
res = list(prime_factors(n))
return sorted([fact, res.count(fact)] for fact in set(res))
>>> prime_factors_mult(315)
[[3, 2], [5, 1], [7, 1]]
>>> def totient(n):
from operator import mul
if n == 1: return 1
return reduce(mul, [(p-1) * p**(m-1) for p,m in prime_factors_mult(n)])
>>> totient(315)
144
정확히 무엇이 "각각 세 개의 결과를 개별적으로 쿼리 할 필요없이 ". 세 가지를 모두 순차적으로 부르는 것을 의미합니까? 그렇다면 그 중 세 가지를 호출하는 함수를 만들고 결과와 함께 배열 (예 :)을 반환 할 수 있습니다. 나는 그 요점을 놓쳤는가? – pcalcao
잠깐, 이것이 오일러 totient (phi) 함수입니까? – Blender
내가 할 수있는 첫 번째 일은 큰 소수가 필요할 경우 확장하여 소수의 목록을 캐싱하는 것입니다. 'prime_factors'에 대한 호출 속도가 상당히 빨라지므로 _one_' totient' 값만 있으면 속도가 빨라질 수 있습니다. – 9000