2017-10-20 1 views
-3

소수점 검사기를 C로 프로그래밍하려고하지만 다음 코드는 소수 이외의 소수를 반환합니다. 프라임으로 등록한 비 소수를 찾을 수 없었습니다. 내가 틀린 곳이 어디인지 확신 할 수 없으며 for 루프가 숫자를 건너 뛰고 있다고 의심하기 시작했습니다.C에서 숫자를 건너 뛰는 루프의 경우

#include <stdio.h> 
#include <stdlib.h> 

int main() { 
    int nummer = 47203; 
    printf("Ist %d eine Primzahl?\n", nummer); 
    int dividey =2; 
    if (nummer == 2){ 
     printf("nein"); 

    }  


    for (dividey = 2; dividey <= nummer/2; dividey++){ 
    if (nummer%dividey==0){ 
     printf("nein"); 
     break; 
    }else { 
     printf("ja"); 
     break; 
    } 
    } 
} 
+4

2 개의 문제 : 하나의 숫자가 나뉘 지 않으면 다른 알고리즘을 건너 뛰고 알고리즘이 멈 춥니 다 !! 그리고 sqrt (nummer)까지 루핑을 고려하면주기를 저장하게됩니다. SO 및 codereview에 대한 소수 체크에 대한 수많은 중복/질문이 있습니다. 그들을 확인하십시오. –

답변

2

예, 숫자를 건너 뛰고 있습니다. 말씀 하셨기 때문에!

예를 들어 15를 확인하는 경우 - 분명히 소수가 아닙니다.

if (nummer%dividey==0) 

15 % 2 1, 그래서이 조건은 실패하고 else 부분으로 이동 : 루프를 통해 처음으로, dividey는 그런 다음이 검사를 할 2로 설정됩니다.

귀하의 다른 부분이 수행합니다

printf("ja"); 
break; 

즉, Ja는 소수임을 말하고 반복하지 않습니다. 비록 소수가 아니기 때문에 모든 제수를 확인하지는 않았습니다. 루프가 3으로 나눈 값을 확인하기를 계속했다면 그것이 소수가 아님을 알았을 것입니다.

+0

그래서 수정 사항은 무엇입니까? –

+0

가장 쉬운 방법은 루프 앞에'false' 플래그를 설정하고'Nein' 브랜치의'break; 앞에 true로 설정하는 것입니다. 루프에서 빠져 나오면 플래그가 여전히 '거짓'이면 소수를 찾았습니다. – Steve

관련 문제