2012-08-01 4 views
3

큰 계승의 모든 약수를 나열하는 효율적인 방법을 생각해 내고 있습니다. 1000라고 가정 해 봅시다. 무차별 한 힘으로는 절대 불가능합니다. 효율적인 접근 방법이 있습니까? 프로그래밍상의 문제점을 해결하기 위해 합계를 찾아야합니다.큰 요인 수의 약수의 합을 찾는 것?

+2

소수 분해를 원한다면 쉽습니다. 소수 요소 (모든 제수수가 제안하는 것)의 모든 고유 한 조합을 원한다면, 약 10 ** 106 개가 있다고 생각합니다. 당신은 그들과 함께 무엇을 제안합니까? – AakashM

+0

AakashM이 맞습니다. [this] (http://www.wolframalpha.com/input/?i=sigma_0%281000!%29)는 1000의 약수입니다! 그러므로 분명히 모두 나열 할 수는 없습니다. – interjay

+0

프로그래밍상의 문제를 해결하기 위해 프로그램을 합산해야합니다. – elasolova

답변

2
  1. 각 숫자 < = 1000의 소수 분해를 찾으십시오. 나는 이것을 프라임 -> 힘의 사전으로 저장할 것입니다. 예 : 24가 2**3 * 3**1이기 때문에 24 {2: 3, 3: 1}과 같은 단일 번호를 입력하십시오.
  2. 1000!의 소수 분해를 찾습니다. 이것은 각각의 키 (소수)의 모든 값을 합산하여 합한 숫자 < = 1000의 사전 조합입니다.
  3. 그러면 @AakashM과 마찬가지로 equation 14 on this page을 사용할 수 있습니다.
+0

N이 1000 인 경우 10E8만큼 커지면 어떻게 될까요? –

+0

나는 접근 방식이 정확히 같을 것이라고 생각한다. 더 오래 걸릴 것이다! 너 그거 해봤 니? 무슨 문제가 있니? – Hbcdev