인프런 커뮤니티 질문&답변

rlawhd0602님의 프로필 이미지

작성한 질문수

(2024) 일주일만에 합격하는 정보처리기사 실기

C언어 기출문제의 변형

소수판별기 전혀 이해가 안되요

24.07.10 15:51 작성

·

274

0

  • 소수판별기에서 main에 있는것은 그렇다치고 for반복문에서 소수얘기가 나오는데 전혀 알아들을수가 없네요~~~

  • 몇번을 봐도 이해가 안되요

답변 5

0

이성미님의 프로필 이미지

2024. 07. 12. 17:20

1과 자기자신외에 다른 수로 나누어 떨어지지 않는 경우 소수라는거죠?

영상 다시보고 이해 좀 해볼게요 갈수록 갑갑해지네요.

주말코딩님의 프로필 이미지
주말코딩
지식공유자

2024. 07. 12. 17:23

0

이성미님의 프로필 이미지

2024. 07. 12. 16:42

선생님 그럼 어떤 걸 보고 소수 판별기 문제라는 걸 알 수 있을까요?

주말코딩님의 프로필 이미지
주말코딩
지식공유자

2024. 07. 12. 16:45

코드를 보셔야합니다. 소수판별기라는 이름은 제가 붙인 것이고요.

지금 보시면 들어오는 숫자에서 1인 경우는 거짓 리턴, 그 외에는 약수가 있으면 거짓 리턴입니다. 그러면 우리가 약수가 없는 수라는 것을 알 수 있죠.

소수가 그 0.123이 소수가 아니고 약수가 1외에 없는 수라는 것으로 이해하시는 것 맞으시죠?! 여기서 소수는 양의 약수가 2개인 자연수입니다.

 

우리가 예를 들어서

input % 2 == 0 인 경우 리턴 참을 한다면,

'짝수판별기' 인 것을 알 수 있잖아요. 이런 식으로 코드를 보고 파악하셔야합니다😊😊

0

이성미님의 프로필 이미지

2024. 07. 12. 16:39

isP 라고 되어 있는 변수명 자체로는 Prime number 라고 단정지을 수 없어 헷갈린게 아닌가 싶어요

개발자들 사이에서 관례처럼 사용되는 단어가 아닌가 유추된다고 합니다.

"is Prime"의 줄임말로 사용될 수 있고 주어진 숫자가 소수인지를 판별하는 함수일 가능성이 큽니다. 하지만 함수의 내용이나 구현 코드를 살펴봐야 정확히 알 수 있는데

for (int i = 2; i < num; i++) {

if (num % i == 0) return 0;

}

return 1;
이 부분에서 num이 소수이면 1 아니면 0을 반환해라

이렇다고 gpt가 알려주네요.... ai가 예시로 들어준 코드와 비교보니 저 부분입니다.

언뜻 보면 for문 같지만 대문자 P로 알아봐야 하나봐요 아니면 프라임 이라고 적어주기도 하는가 봅니다

주말코딩님의 프로필 이미지
주말코딩
지식공유자

2024. 07. 12. 16:41

변수명이나 함수이름은 힌트로 나올 수도 있고, 아닐 수도 있습니다.

그냥 abc() 이렇게 나올 수도 있어요. 함수명에 크게 신경쓰시면 안됩니다.

0

김창수님의 프로필 이미지

2024. 07. 11. 09:28

삭제된 글입니다

김창수님의 프로필 이미지

2024. 07. 11. 09:45

그럼 int isP(int num)부분이 1~50, for문 i부분이 2~49로 지정되어 있는데 전체 코드상의 흐름을 예를 들자면

num = 1 -> return(0) 출력불가

num = 2-> if문 실행불가 _> return(1) 출력가능

num = 3, i =2 -> if문 3%2 = 1 -> return(1) 출력가능

num = 4, i=2, 3-> if문 4%2 = 0 -> return(0) 출력 불가능 이런식으로 가는게 맞을까요?

주말코딩님의 프로필 이미지
주말코딩
지식공유자

2024. 07. 11. 13:02

댓글 원문이 저만 안보일까요? 질문이 전체 공백으로 보입니다..😅 아니면 아래 질문에만 답변드리면 될까요??

김창수님의 프로필 이미지

2024. 07. 11. 14:27

원문 c언어 기출문제의 변형 7분 27초입니다

주말코딩님의 프로필 이미지
주말코딩
지식공유자

2024. 07. 12. 01:14

네 맞습니다. 지금 리턴이 0이 되는 경우

if (0) -- 거짓이므로 printf 실행하지 않음

if (1) -- 참이므로 해당 i 값 출력하는 printf문 실행

 

이렇게 동작합니다.

0

주말코딩님의 프로필 이미지
주말코딩
지식공유자

2024. 07. 10. 22:45

안녕하세요, 소스코드가 조금 어렵게 보이실 수가 있습니다.

우선 C언어의 return문에 대해서 추가적인 설명이 필요합니다.

어떤 입력값이 와서 함수를 수행한 후에, return문을 만나면 해당 함수는 값을 반환해버리고 끝나버립니다.

그러면 isP 함수에서 목적은 무엇일까요? 우리는 return 1(참)을 받아야 합니다.

약수가 1을 제외하고 하나라도 있으면 0(거짓)을 리턴하고 함수는 종료가 됩니다.

 

예를 들어보겠습니다.

1을 입력 받았다고 합시다. 1은 그 자체로 소수가 아닙니다. 소수가 되려면 1을 포함해서 자기자신이 약수여야 합니다. (예를 들어 7의 경우 1과 7이 자기 자신의 약수) 그래서 첫번째 if문에 걸려 0(거짓)이 리턴됩니다.

 

그 외에 약수가 여러개인 숫자가 뭐가 있을까요? 10이 생각나네요.

10은 약수가 1, 2, 5, 10입니다. 약수가 2개가 아니니까 0(거짓)을 리턴 받아야겠죠?

함수 안의 첫번째 if문을 통과하고 반복문을 만나게 됩니다.

반복문을 해석해보면, 자기 자신(num)보다 작으면서 "2"보다 큰 모든 수를 자기 자신(num)을 나눠서 나머지가 0인 것이 있는지 확인합니다. 나머지가 0이라는 것은 약수라는 뜻입니다. 약수가 발견되자마자 그 즉시 0(거짓)을 반환합니다. 여기에서는 2를 만나면 0을 리턴하고 함수가 끝나겠네요. 2는 10을 나누면서 나머지가 0이기 때문입니다.

 

저 2가지 조건 외에는 모두 소수입니다.

예를 들어 5, 7을 봅시다. 5는 첫번째 if문에도, 두번째 반복문에서도 걸리지 않습니다. 7도 마찬가지이지요?

1도 아니지만, 자기보다 작은 숫자 중에서 본인을 나머지 0으로 나누는 수가 없습니다. (1보다 크면서 자기보다 작은 약수가 없다는 뜻)

 

그래서 isP는 1이 아니면서, 2보다 크면서 자기 자신보다 작은 약수가 있는 경우를 제외하고 모두 1(참)을 리턴합니다.

 

이해에 도움이 좀 되셨을까요?