소수

2012-11-25 2 views
-4

FIRST 프로그램소수

#include<stdio.h> 

void main() 
{ 
    int n,c; 
    printf("enter a numb"); 
    scanf("%i", &n); 

    for(c = 2; c <= n; c++){ 
     if(n % c == 0) 
      break; 
    } 

    if(c == n) 
     printf("\nprime\n"); 
    else 
     printf("\nnot prime\n"); 
    getchar(); 
} 

두 번째 프로그램은

#include "stdio.h> 

int main() 
{ 
    printf("Enter a Number\n"); 
    int in, loop, rem, chk; 
    scanf("%d",&in); 

    for (loop = 1; loop <= in; loop++){ 
     rem = in % loop; 
     if(rem == 0) 
      chk = chk +1; 
    } 
    if (chk == 2) 
     printf("\nPRIME NUM ENTERED\n"); 
    else 
    printf("\nNUM ENTERED NOT PRIME\n"); 
    getchar(); 
} 

제 2 회 프로그램이 작동하지만, 첫 번째는 내 친구가 쓴 하나, 프로그램이 그것을 확인에서 잘 보이지만, 우리가 들어서서 첫 번째 프로그램의 if 상태가 모든 입력 아래에 사실이라는 것을 알았습니까? 여기에 논리적 오류가 무엇인지 알려주세요. ......

+1

비효율적 인 알고리즘에 대한 코멘트가 없습니다. 'scanf()'는'n '이 아닌'n '의 주소 *가 필요합니다 ('n '이 아님). – WhozCraig

답변

3

첫 번째 프로그램에 대해 이야기하는 경우 정수 n을 읽는 방법에 문제가 있습니다. 그 주소를 전달해야합니다 :

printf("enter a numb"); 
scanf("%i",&n); 

나는 당신의 컴파일러가 이것을 잡지 못한다는 것에 놀랐습니다.

+1

+1 : 그것은 분명히했지만, 경고로, 요즘에는 * 참석 *했습니다. '-Wall -Werror' ftw. – WhozCraig

+0

** 감사합니다 ** – DevX

2

이 조건은 wron입니다. 첫 번째 글자 :

 for(c=2;c<=n;c++) 

당신은 n/2가되어야합니다. 귀하의 경우에는 조건이 항상 true입니다. 왜냐하면 c == n 일 때 n % c는 0과 같아서 휴식에 도달하기 때문입니다.

소수의 정의는 1과 그 자체의 약수 만 정의한다는 것입니다. 문에 대한 매우 정확한

은 다음과 같습니다

for (c = 2; c < = n/2; c++) 

편집 :

당신이 (SQRT (N)) TRUNC에 도달 한 후 사실, 더 이상 약수가 없어야합니다.

 for (c=2; c < trunc(sqrt(n)) c++) 
+0

n == c이면 프로그램이 "소수"를 반환합니다. 비록 이것이 효율적이지는 않지만, 정확합니다. –

+0

'trunc (sqrt (n))'을 반복적으로 재평가하는 것을 const-expr-out하기위한 옵티 마이저에 대한 믿음을 갖기. – WhozCraig

1

프로그램 논리가 맞습니다. 문제는 scanf 문에 있습니다 ... 변수의 주소를 전달해야합니다. scanf("%i",&n);