-
백준 11653번 (소인수분해) c언어백준 문제 2021. 8. 30. 16:49728x90
어떤 정수 n이 주어졌을때, n을 소인수분해 하는 과정을 전부 출력해주면 된다.
예를들어 만약에 정수 n 이 100이면 우리는 100을 소인수분해 하는 과정
즉, (보라색 동그라미)2, 2, 5, 5를 출력해주면 된다.
void soin(int a) { //소인수분해 for (int i = 2; i * i <= a; i++) { if (a % i) continue; while (a % i==0) { printf("%d\n", i); a /= i; } } if (a != 1) { printf("%d\n", a); } }
먼저 for문에서 정수 n을 받게 되면 n의 제곱근까지 n과 나누어 질 수 있는지 확인하면 된다.
if(a % i) 만약 n이 i와 나눠서 나머지가 0이 아니면 나누어 떨어질 수 없으므로 continue한다.
while(a % i) 만약 a가 i와 나누어 떨어지면 바로 i를 출력해주고 또 다시 i와 나눈다. 이를 반복한다.
if(a != 1) 만약 a가 1이면 완전히 소인수분해가 끝난것이므로 if문으로 안들어가게 된다.
아까 그림에서 봤다시피 소인수분해가 끝나고 1은 출력해줄 필요가 없기 때문이다.
전체 코드는 다음과 같다.
#include<stdio.h> void soin(int a) { //소인수분해 for (int i = 2; i * i <= a; i++) { if (a % i) continue; while (a % i==0) { printf("%d\n", i); a /= i; } } if (a != 1) { printf("%d\n", a); } } int main() { int n; scanf("%d", &n); soin(n); return 0; }
'백준 문제' 카테고리의 다른 글
백준 1158(요세푸스 문제) c++ (0) 2021.09.05 백준 10804(카드 역배치) c++ (0) 2021.09.05 백준 15552(빠른 A+B) C / C++ (0) 2021.09.05 백준 16563번 (어려운 소인수분해) c++ (0) 2021.08.31 백준 2960번(에라토스테네스의 체)c++ (0) 2021.08.30