Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
29 | 30 |
Tags
- kotlin
- 우송대
- 코틀린
- 아두이노
- androidstudio
- 개발 보드
- 카이캐드
- GCD
- 7세그먼트
- 우송대학교
- ESP32_S2
- 약수 구하기
- 업캐스팅
- 카이캐드 설치
- 자료구조
- 유클리드 호제법
- 우송대 라즈베리파이 피코
- 안드로이드스튜디오
- 카이캐드 다운로드
- ESP32_S2_WROVER
- 아두이노 모터 드라이버
- KiCad
- 추상화함수
- 재정의함수
- L293D
- string함수
- ATmega328p
- Arduoin
- 라즈베리파이 피코
- PICO4
Archives
- Today
- Total
개발자의 생활
[소수] 구하기, 판별(Kotlin) 본문
소수: 자연수 중 1 과 자기 자신만으로 만 나누어 떨어지는 수
예) 2, 3, 5, 7, 11, 13,...
1. Brute Force(완전탐색)
가장 작은 소수인 2 부터 n 까지 순서대로 하나씩 판별하는 방식입니다.
판별은 2 부터 구할 값의 제곱근 까지만 순서대로 나머지값이 0인지만 알면 됩니다.
val maxNum = 100
val primes = mutableListOf<Int>()
for (i in 2..maxNum) {
var isPrime = true
for (j in 2..sqrt(i.toDouble()).toInt()) {
if (i % j == 0) {
isPrime = false
break
}
}
if (isPrime) primes.add(i)
}
println(primes.joinToString())
시간 복잡도: O( n* √(n) )
2. 에라토스테네스 체
먼저 구할 만큼의 소수를 2 부터 리스트를 만들어 놓습니다.
그리고 소수 자신의 배수는 소수가 될 수 없으니 자신의 배수를 만들어 놓은 리스트에서 제거하면 소수만 남게 됩니다.
val maxNum = 100
val isPrime = BooleanArray(maxNum + 1) { true }
isPrime[0] = false // 0은 소수가 아님
isPrime[1] = false // 1은 소수가 아님
for (i in 2..sqrt(maxNum.toDouble()).toInt()) {
if (isPrime[i]) {
for (j in i * i..maxNum step i) {
isPrime[j] = false
}
}
}
val primes = (2..maxNum).filter { isPrime[it] }
println(primes.joinToString())
시간 복잡도: O(n log log n)
소수 구하는 알고리즘은 다양하지만 대표적인 2개의 알고리즘을 알아보았습니다.
'알고리즘' 카테고리의 다른 글
[공배수(CM), 최소공배수(LCM)] 구하기(Kotlin) (0) | 2025.01.20 |
---|---|
[소인수] 구하기(Kotlin) (1) | 2025.01.16 |
[약수] 구하기(Kotlin) (0) | 2025.01.11 |