-
문제로 배우는 C언어 - N의 약수 출력하기, 소수 판별하기, 두 수의 최대공약수 구하기, 구구단 출력하기C언어 2020. 2. 24. 17:52
약수란 무엇인가?
약수와 배수 (초등5학년 1학기 1단원) (개념 이해하기) | 칸아카데미
약수와 배수가 어떻게 서로 연관되는지 알아봅시다.
ko.khanacademy.org
A를 B로 나누었을 때 나머지 없이 맞아떨어지면 B는 A의 약수라고 할 수 있다.
그 성질을 이용해서 코드를 짠다.
소수란?
소수와 합성수란? (개념 이해하기) | 소수 (중등1학년) | 칸아카데미
소수와 합성수에 대해서 배워보고 둘을 구별해 봅시다.
ko.khanacademy.org
소수는 약수로 자기 자신과 1만을 가지는 수로, 어떤 수로 나누어도 맞아떨어지지 않고
오직 1로 나누었을 때만 맞아떨어지는 수를 말한다.
예 ) 13이나 17
① 약수를 모두 합친수가 자기 자신 + 1과 같다면 그 수는 소수이다.
예) 13의 약수: 13, 1
약수의 합(14) = 자기자신+1(14)
② 혹은 약수의 갯수를 세는 방식도 있다.
소수라면, 약수의 갯수는 2와 같을 것이다. 약수를 찾을 때마다 cnt에 ++을 해주고
cnt가 2와 같다면 YES를 출력한다.
③ A라는 수를 입력했을 때, A가 소수라면 1과 자기 자신 사이에 어떤 약수도 발견되지 않을 것이다.
다른말로하면 2~ A-1 사이에 약수가 발견된다면 A는 소수가 아닌 것이다.
2부터 특정 수 미만까지를 살펴보아 약수가 발견되면 NO, 발견되지 않으면 YES를 출력하도록 코드를 짤 수도 있다.
for(i=2; i<num; i++) i는 2부터 시작해서 해당 수에서 -1한 숫자까지가 해당된다.
이 구간의 수를 살펴 하나라도 약수가 발견되면 NO를 출력하고 for문의 반복을 멈춘다.
만약 중간에 멈추지 않고 i가 num과 같은 숫자가 되어 i<num을 충족하지 못해서 for 문이 끝났다면
그 수는 소수라고 볼 수 있다. i가 num과 같다면 YES를 출력한다.
최대공약수란?
두 수의 약수 중에 공통되는 숫자 중에 가장 큰 수.
나는 이런식으로 짰는데 굳이 if를 둘로 나누지 않고 &&으로 한번에 해도 됐을 일이었다.
그리고 굳이 num%i를 쓰지 않고
if (a%i==0 && b%i==0)으로 나타내도 된다.
구구단 출력하기
'C언어' 카테고리의 다른 글
문제로 배우는 C언어 - 최소값 구하기, 홀수의 합 구하기, 동물의 수 구하기, 10부제 (0) 2020.02.27 문제로 배우는 C언어 - 지수연산 (0) 2020.02.25 문제로 배우는 C언어 - 1부터 N까지 출력 (0) 2020.02.24 문제로 배우는 C언어 - 반복문 설명(for, while), 수 누적하기, continue (0) 2020.02.24 문제로 배우는 C언어 - 삼각형 판별하기 (0) 2020.02.23