[첫번째]
#include <stdio.h>
int main() {
int n,i=2;
scanf("%d",&n);
while(n>1) {
if(i*i>n) {
printf("%d ", n);
break;
} else if(n%i==0) {
printf("%d ",i);
n=n/i;
} else {
i+=1;
}
}
return 0;
}
======================================
[두번째]
#include <stdio.h>
int main() {
int n,i=2;
scanf("%d",&n);
while(i*i<=n) {
if(n%i==0) {
printf("%d ",i);
n=n/i;
} else {
i+=1;
}
}
if(n>1) {
printf("%d", n);
}
return 0;
}
=====================================
[세번째]
#include<stdio.h>
int main(void) {
int n, i;
scanf("%d", &n);
// 중복된 소인수 2를 모두 출력한다.
while(n%2==0) {
printf("2 ");
n=n/2;
}
// 홀수 소인수를 모두 출력한다.
// 홀수 소인수는 3부터 시작하여 2씩 더한다.
// 만약 현재 소인수를 제곱한 수가 n보다 크다면 [아래쪽 참고]
// 남아 있는 n은 1이 되었거나 아니면 i보다 큰 소인수이다.
i=3;
while(i*i<=n) {
// 만약 n이 소인수 i를 가지면 그 소인수를 출력한다.
if(n%i==0) {
printf("%d ", i);
n=n/i;
// 소인수 i를 가지지 않으면 다음 홀수로 넘어 간다.
} else {
i+=2;
}
}
// 만약 n이 1보다 크면 n을 출력해 준다.
if(n>1) {
printf("%d", n);
}
return 0;
}
// 만약 n이 97이라면 소수이다. 위의 루프에서는
// i의 값이 11일 경우 n이 i*i보다 작기 때문에 while문이 끝이 난다.
// 위와 같이 해주면 반복회수를 줄일 수 있다
'c·c++ > c 프로그래밍' 카테고리의 다른 글
실력 테스트 문제 (0) | 2020.02.10 |
---|---|
개미수열-보충과제 모음: (0) | 2020.02.10 |
maximum sum subarray(배열의 최대합 구간) (0) | 2016.04.08 |
quick sort (0) | 2015.10.01 |
하노이탑 - 반복문사용 (0) | 2015.09.20 |