티스토리 뷰

import java.io.*;
import java.util.*;

class Main {
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(in.readLine());
for(int i=2; i*i<=n; ++i) {
while(n % i == 0) {
System.out.println(i);
n /= i;
}
}
if(n > 1) {
System.out.println(n);
}
}
}


소인수분해를 위해 소수를 구할 필요 없이

2부터 sqrt(n)까지 순회하면서 해당 수가 주어진 수를 나눌 수 없을 때까지 나눠준다.

끝에 남은 숫자를 출력하여 끝을 낸다.



import Foundation


var n = Int(readLine()!)!

for i in stride(from: 2, through: Int(sqrt(Double(n))), by: 1) {

    while n % i == 0 {

        print(i)

        n /= i

    }

}

if n > 1 {

    print(n)

}


Swift 팁:

범위연산자? 아무튼 (0...2)나 (0..<2) 같은 것으로 for문을 돌리면

lowerBound가 upperBound보다 클 때 프로그램이 터지게 되므로

stride() 함수를 사용하여 C스타일로 for문을 돌리는 것이 좋겠다.

'Algorithm > Baekjoon Online Judge' 카테고리의 다른 글

1676번 '팩토리얼 0의 개수'  (0) 2018.08.01
10872번 '팩토리얼'  (0) 2018.08.01
6588번 '골드바흐의 추측'  (0) 2018.08.01
1929번 '소수 구하기'  (0) 2018.08.01
11576번 'Base Conversion'  (0) 2018.08.01
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함