반응형
문제
https://www.acmicpc.net/problem/4134
4134번: 다음 소수
첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다.
www.acmicpc.net
풀이
n을 입력받은 후, n보다 크거나 같은 소수 중 가작 작은 소수를 출력해야합니다.
2부터 n - 1까지 나누어보고 나누어 떨어진다면 소수가 아니라고 판별할 수 있습니다.
이 방식은 O(n)의 시간 복잡도가 소요됩니다.
2부터 √n 까지만 나누어 떨어지는지 확인해도 동일한 결과입니다.
이 방식은 O(√n)의 시간 복잡도가 소요됩니다.
아래 포스팅에 정리를 해두었습니다.
https://dev-mandos.tistory.com/91
[알고리즘] 간단한 소수 판별 알고리즘 (Swift)
소수 소수(Prime Number)는 1보다 큰 자연수 중 1과 자기 자신만을 약수로 가지는 수 입니다. 간단한 소수 판별 알고리즘 그렇다면 해당 수가 소수인지 아닌지 어떻게 판별할까요? 아주 간단한 방식
dev-mandos.tistory.com
입력받은 n부터 시작하여 1씩 늘려서 n보다 크거나 같은 소수 중 가장 작은 소수를 구할 수 있습니다.
소스코드
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import Foundation | |
func isPrimeNumber(num: Int) -> Bool { | |
if num < 2 { | |
return false | |
} | |
for i in 2..<Int(sqrt(Double(num)) + 1) { | |
if num % i == 0 { | |
return false | |
} | |
} | |
return true | |
} | |
func solution() { | |
var num = Int(readLine()!)! | |
while !isPrimeNumber(num: num) { | |
num += 1 | |
} | |
print(num) | |
} | |
let t = Int(readLine()!)! | |
for _ in 0..<t { solution() } |
후기
효율적으로 소수를 판별하는 방법에 대해 알고있다면 쉽게 풀 수 있는 문제입니다.
반응형
'PS > 백준' 카테고리의 다른 글
[BOJ] 백준 4948 베르트랑 공준 (Swift) (0) | 2023.03.16 |
---|---|
[BOJ] 백준 1929 소수 구하기 (Swift) (0) | 2023.03.16 |
[BOJ] 백준 2485 가로수 (Swift) (0) | 2023.03.16 |
[BOJ] 백준 1735 분수 합 (Swift) (0) | 2023.03.15 |
[BOJ] 백준 13241 최소공배수 (Swift) (0) | 2023.03.15 |