2011-08-04 6 views
1

가능한 중복 : 나는 오일러 문제에 노력하고 내가 큰 숫자에 대한 몇 가지 수학적 솔루션을 읽어 문제 (12)와 벽에 부딪하지만 난 봤는데
Project Euler Problem 12 - C++오일러 문제 12를 어떻게 풀 수 있습니까?

아직도 옳은 대답을 얻지 못했습니다. 내 코드 :

#include <iostream> 
using namespace std; 

int divisorCount(const unsigned long long x) 
{ 
    int divizers = 0; 
    unsigned long long i = 1; 
    while(i <= x/i) 
    { 
     if(x % i == 0) 
     { 
      divizers++; 
     } 
     i++; 
    } 
    return divizers; 
} 

int main() 
{ 
    bool test; 
    unsigned long long total = 0, spread = 1; 
    int divisors = 1; 

    while(divisors < 501) 
    { 
     total+=spread; 
     divisors = divisorCount(total); 
     spread++; 
     if(divisors > 501) 
      cout << total << " " << spread << " " << divisors << endl; 
    } 


    cout << total << " is divisible by 500+ numbers" << endl; 
    system("pause"); 
    return 0; 
} 

의견이 있으십니까?

+0

무엇이 작업입니까? 링크 없음, 텍스트 없음 :/ –

+0

@yi_H - [Project Euler] (http://projecteuler.net/index.php?section=problems&id=12)는 비교적 잘 알려져 있습니다. –

+2

나는 그것을 알고있다. 외부 리소스를 연결하는 것이 좋습니다. –

답변

1

가 SQRT (x)는 상기 x의 제수, 그래서이 문제를 해결 :

while(i <= x/i) 

에 : 올바른 수를 표시하므로 또한

while(i <= x) 

는, 인쇄 후 spread++; 할.

참고 : 테스트하기 전에 인쇄하기 전에 if을 제거하여 무슨 일이 일어나는지 확인하는 것이 좋습니다.

주 2 :이 문제를 해결하는 훨씬 빠른 방법은 해당 숫자의 속성을 실현하는 것입니다 (triangular numbers 참조). 오일러 프로젝트는 엄청난 수학 기반이므로 무차별 대용 솔루션을 코딩하지 마십시오.

1

if 문에 대한 생각 : i 이후

if(x % i == 0) 
{ 
    divizers++; 
} 

x의 요인, 즉시 x의 어떤 다른 요인을 쓸 수있다? 3이 24의 요소라면 24의 다른 요소는 무엇입니까? 이 힌트에는 숨겨진 잡동사니가 있습니다. 그래서 당신은 알고 있습니다.

관련 문제