2017-11-06 16 views
1

주 요인과 제수를 찾는 것에 대한 게시물을 보았지만 파이썬에서 요인에 대한 질문에 대한 답을 찾지 못했습니다. 나는 기본 요소 목록을 가지고 있습니다. 즉, 24[2,2,2,3]입니다. 이 목록에서 가능한 모든 factorisation, 즉 24에 대한 출력은 [[2,12], [3,8], [4,6], [2,2,6], [2,3,4], [2,2,2,3]]이어야합니다. itertool 접근법을 시도했지만 중복 응답이 많았고 다른 것을 잊어 버렸습니다 ([2,3,4]을 찾았지만 [4,6]은 무시한 것처럼).파이썬의 소수 요소 목록에서 가능한 모든 요인을 만듭니다.

저는 특히 생성 된 소수 요소 목록을 사용하는 접근 방식에 관심이 있습니다. 재귀 함수로 해결 방법을 찾았습니다.

def factors(n, n_list):     
    for i in range(2, 1 + int(n ** .5)): 
     if n % i == 0: 
      n_list.append([i, n // i]) 
      if n // i not in primes: #primes is a list containing prime numbers 
       for items in factors(n // i, []): 
        n_list.append(sorted([i] + items)) 
    fac_list = [[n]]     #[n] has to be added manually 
    for facs in n_list:    #removes double entries  
     if facs not in fac_list: 
      fac_list.append(facs) 
    return fac_list 

큰 숫자의 경우 n은 시간이 많이 걸리지 만 소수가 아닌 모든 숫자를 조사해야하기 때문에 시간이 오래 걸립니다. 소수 요소 목록에 대한 결합론 접근법은 훨씬 빠릅니다.

편집 : 여러 리소스를 살펴본 후에 가장 좋은 전략은 가장 높은 정답 인 here on SO입니다. 간결하고 쉽게 모든 언어로 구현할 수있는 사람이 선호합니다. 경우 폐쇄.

+0

첫 번째 게시물 인 jmd_dk을 포맷 해 주셔서 감사합니다. 나는 그 변화에주의를 기울 였고이 규칙들을 기억하려고 노력할 것이다. 적절한 들여 쓰기를위한 코드에 대해 "오른쪽/왼쪽으로 블록 변경"명령이 있습니까? 아니면 각 줄에 수동으로 4 칸을 추가해야합니까? – MrT

+0

초심자의 실수 - '{}'버튼을 사용하여 코드의 형식을 지정하면됩니다. – MrT

답변

1

귀하의 작업은 숫자의 multiplicative partition을 결정하는 것입니다. Google은 이동해야 할 곳을 알려줍니다. 스택 오버플로는 이미 an answer입니다.

+0

매우 감사드립니다. "Multiplicative 파티션". 궁금하지 않고, 나는 맞는 키워드없이 대답을 찾지 못했습니다. – MrT