2014-04-12 4 views
0

나는 소수점 이하를 계산하는 프로그램을 작성하여 CPP를 가르치려고합니다. 저는 Win 8.1 Pro (x64)에서 3 세대 [email protected] (x4) 및 8GB RAM의 랩톱에서 Visual Studio Express 2013을 사용하고 있습니다. 나는 cpp (아마도 명백한)에 익숙하지 않지만이 프로그램이 6657 이상에서 작동하기를 기대하고 있습니다. 어떤 생각이라도 감사 할 것입니다!계산 소수; 프로그램 작업/6657 과거의 충돌;

EDIT : 의도 한대로 작동하고 벡터를 사용하는 새 버전의 프로그램입니다. 당신의 도움을 주셔서 감사합니다!

/* 
* Prime finder, starts at 2 works up, was working initially 
* to 6658, now can run to 150000(highest tested yet) in ~17m25s. 
* May need optimization. Uses vector size to check for nth number. 
* Must have #include <vector> 
*/ 

std::vector<int> prime; // required for program to work. 
int primes(unsigned y){ 
    using namespace std; 
    unsigned b = 0; 
    bool z = true; prime.push_back(2); 
    for (b = 2; prime.size() <= y; b++){ 
     if (b % 2 == 0 && b < y){ b++; }//catches even numbers. 
     //finds primes to the nth integer 
       /*decrementing in this loop produced a strange 
       *end count, used increments instead counts fixed 
       *and program completes sooner. 
       */ 

      for (unsigned j = 2; j < prime.size(); j++){ 
       //if (j > y){ return 0; }//catches infinite loop     
       if (prime.at(j) >= (b/2)) 
        //removes unneccessary checking 
       {break;} 
       if (b%prime.at(j) == 0) 
       {z = false; j = prime.size();} 
      } 
      if (z == true){ prime.push_back(b); } 
      z = true; 
     } 
    }return 0; 
} 
+0

배열 인덱스가 범위를 벗어남 : 벡터와 같이 이미 구현 된 데이터 구조를 대신 사용하십시오. – mbx

답변

4

이 줄

소수 INT [] = {0} // 프로그램이 동작하기 위해 필요한. 반드시 초기화해야합니다.

은 정확히 하나의 소수를위한 공간을 만듭니다.

그래서 당신은 a > 1, 당신은 배열의 범위를 벗어 가고있다 j > 1 또는 prime[a]의 값 prime[1], prime[j-1]을 수행 할 때. 당신이 중 하나를해야합니다

: int prime[SOMENUMBER] = { 0 };

vector<int>를 사용

  1. 사용 vector<int> primeprime.push_back(i);
  2. 사용은 또한 당신의 수 prime[0]를 저장할 필요가없는 이점이있다 소수. 대신 요소가 얼마나 많은지 알려주는 prime.size() 함수가 있습니다.

+0

전에는 벡터를 살펴 봤지만 사이트에서 설명한대로 구문을 사용하는 데 문제가있었습니다. 나는 그 이후로 프로그램을 작동 시키려면 방법 2를 사용했고 실제로 그렇게했습니다. 도와 주셔서 감사합니다. 내가 벡터를 사용하는 법을 배웠다면 다시 쓰겠다고 말하고 있습니다. 배열 크기가 일정해야한다는 것을 알지 못했습니다. 벡터는 n 번째 숫자 이후에 나가야하는 것처럼 소리가납니다. 확실히 유익한. –

3
int prime[] = {0}; 

해당 배열의 크기는 1이지만 나중에 더 큰 색인을 찾습니다. 0 이외의 다른 값에서는 작동하지 않아야하지만 어떤 이유로 든 운이 좋다. 어레이 크기를 늘리거나 동적 인 것으로 작업하십시오.