티스토리 뷰
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 |
댓글