2012-05-20 2 views
0
int prime (int poss_prime); 

int main() { 

    int poss_prime; 

    for (poss_prime = 2; poss_prime <= MAX_INT; poss_prime++) { 
     if (prime (poss_prime)) { 
      printf("%d ", poss_prime); 
     } 
    } 

    printf("\n\n"); 
    return 0; 
} 

int prime (int poss_prime) { 

    int poss_factor; 

    for (poss_factor = 2; poss_factor <= poss_prime/2; poss_factor++) { 
     if (poss_prime % poss_factor == 0) { 
      return 0; 
     } 
    } 

    return 1; 

} 

if 문에서 조건으로 함수를 사용할 수있는 이유와 for 루프 조건에서 poss_prime을 2로 나누는 이유를 이해할 수 없습니다. . 고맙습니다.이 소수 코드 생성 코드가 어떻게 작동하는지 설명하십시오. (C에서)

+0

2로 나누는 것은 구현자가 실제로 무엇을했는지 이해하지 못했거나 'sqrt'비용이 너무 많이들 것이라고 생각했다는 것을 의미합니다. – dmckee

+0

@dmckee뿐만 아니라'sqrt (n)'은 O (sqrt (n))보다 더 복잡합니다. 'sqrt (int n) {int c = 1; (c * c <= n) ++ c; return c-1;}'과 같이 구현 한 경우에도 sqrt를 사용하는 버전이 반으로 나뉜다. . –

답변

2

때문에 2 분할기 재

는 그 반 수 이하이어야 . 은 if 문에서 함수 호출을 두는 것은 그것은 이후에 그 반환 값을 필요로하지 않는 경우에, 이렇게 단지 깔끔한 방법입니다

int value = prime(possprime); 
if(value) 

에 해당합니다. C의 논리식도 숫자 인수를 허용합니다. 0은 거짓이고, 양의 정수는 참입니다. 나는 음의 정수의 결과를 모른다.

그러나 bool을 prime의 반환 유형으로 사용하면 명확한 사실/거짓 상황임을 분명히 알 수 있습니다.

프라임 발생기 자체 : 해당 숫자의 모든 요소를 ​​확인합니다. 그것은 원래 값의 절반보다 큰 요소를 가질 수 없으므로 for 루프는 가능한 소수 값의 절반으로 만 이동합니다.

+0

그런 다음 값에 인수가 있으면 함수는 0을 반환하고 false이면 소수를 나타내는 false를 반환합니다. – 3Pi

+2

음수 역시 C와 유사한 언어로 진리입니다. –

+0

그러면 0 (거짓)을 반환하면 숫자가 인쇄됩니까 ?? 그것은 어떤 이유로 든 나에게 의미가 없습니다 .. –

0

기본 프로그래밍.

함수 prime은 발견 한 내용에 따라 1 또는 0을 반환합니다. C에서 0은 "거짓"을 의미하고 1은 "참"을 의미합니다. 수 중 어느 요소가있는 경우 가능한 한 작은 계수 함수 prime()이 창은 정수를 입력으로서 갖고 2

관련 문제