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 |
Tags
- useDispatch
- json-server
- 항해99
- Python
- programmers
- react
- sw expert academy
- maeil-mail
- Get
- java
- 매일메일
- 알고리즘
- redux-toolkit
- 항해플러스
- 리액트
- Algorithm
- 자바
- 코딩테스트합격자되기
- SW
- axios
- JavaScript
- redux-saga
- createSlice
- redux
- react-router
- C++
- 테코테코
- 프로그래머스
- react-redux
- 이코테
Archives
- Today
- Total
Binary Journey
[Algorithm] 에라토스테네스의 체 본문
반응형
인프런 강의 22강에 대한 리뷰이다.
에라토스테네스의 체는 프로그래머스 소수찾기에서 다뤘던 터라 익숙한 개념이다.
https://binaryjourney.tistory.com/120
1) 시간 복잡도가 O(N)인 소수찾기
// C++
#include <stdio.h>
bool isPrimeNumber(int x) {
for (int i = 2; i < x; i++) {
if (x % i == 0 ) return false;
}
return true;
}
int main(void) {
printf("%d", isPrimeNumber(100));
return 0;
}
// Javascript
function isPrimeNumber(x) {
for (let i = 2; i < x; i++) {
if (x % i === 0) return false;
}
return true;
}
function main () {
console.log(isPrimeNumber(100));
}
main();
# Python
def isPrimeNumber(x):
for i in range(2, x + 1):
if x % i == 0: return False
return True
if __name__ == "__main__":
print(isPrimeNumber(100))
// Java
public class Main
{
private static boolean isPrimeNumber(int x) {
for (int i = 2; i < x; i++) {
if (x % i == 0) return false;
}
return true;
}
public static void main(String[] args) {
System.out.println(isPrimeNumber(100));
}
}
Java로 하니까 엄청 오래 걸림...!
2) N**1/2 까지 소수를 찾으면 시간 복잡도를 줄일 수 있음(약수의 대칭 특징을 이용)
// C++
#include <stdio.h>
#include <math.h>
bool isPrimeNumber(int x) {
int end = (int) sqrt(x);
for (int i = 2; i <= end; i++) {
if (x % i == 0 ) return false;
}
return true;
}
int main(void) {
printf("%d", isPrimeNumber(97));
return 0;
}
// Javascript
function isPrimeNumber(x) {
const end = parseInt(Math.sqrt(x));
for (let i = 2; i <= end; i++) {
if (x % i === 0) return false;
}
return true;
}
function main() {
console.log(isPrimeNumber(97));
}
main();
# Python
def isPrimeNumber(x):
end = int(x ** (1/2))
for i in range(2, end + 1):
if x % i == 0: return False
return True
if __name__ == "__main__":
print(isPrimeNumber(97))
// Java
public class Main
{
private static boolean isPrimeNumber(int x) {
int end = (int) Math.sqrt(x);
for (int i = 2; i <= end; i++) {
if (x % i == 0) return false;
}
return true;
}
public static void main(String[] args) {
System.out.println(isPrimeNumber(97));
}
}
3) 엄청나게 많은 수에서 소수 찾기 -> 배열 이용 (에라토스테네스의 체)
자세한 설명은 위에 참조한 링크에 있다.
(배수들을 제거함)
// C++
#include <stdio.h>
int number = 100000;
int a[100001];
void primeNumberSieve() {
for (int i = 2; i <= number; i++) {
a[i] = i;
}
for (int i = 2; i <= number; i++) {
if (a[i] == 0) continue;
for (int j = i + i; j <= number; j+= i) {
a[j] = 0;
}
}
for (int i = 2; i <= number; i++) {
if (a[i] != 0) printf("%d", a[i]);
}
}
int main(void) {
primeNumberSieve();
return 0;
}
// Javascript
let number = 100000;
let a = new Array(100001).fill(0);
function primeNumberSieve() {
for (let i = 2; i <= number; i++) {
a[i] = i;
}
for (let i = 2; i<= number; i++) {
if (a[i] == 0) continue;
for (let j = i + i; j <= number; j += i) {
a[j] = 0;
}
}
for (let i = 2; i <= number; i++) {
if (a[i] !== 0) console.log(a[i]);
}
}
primeNumberSieve();
# Python
number = 100000
a = [0] * 100001
def primeNumberSieve():
for i in range(2, number + 1):
a[i] = i
for i in range(2, number + 1):
if a[i] == 0: continue
for j in range(i + i, number + 1, i):
a[j] = 0
for i in range(2, number + 1):
if not a[i] == 0: print(a[i])
if __name__ == "__main__":
print(primeNumberSieve())
// Java
public class Main
{
private static int number = 100000;
private static int[] a = new int[100001];
private static void primeNumberSieve() {
for (int i = 2; i <= number; i++) {
a[i] = i;
}
for (int i = 2; i <= number; i++) {
if (a[i] == 0) continue;
for (int j = i + i; j <= number; j+= i) {
a[j] = 0;
}
}
for (int i = 2; i <= number; i++) {
if (a[i] != 0) System.out.printf("%d ", a[i]);
}
}
public static void main(String[] args) {
primeNumberSieve();
}
}
반응형
'Algorithm > 알고리즘 스터디(2021.07)' 카테고리의 다른 글
[Algorithm] Floyd Warshall Algorithm (플로이드 와샬 알고리즘) (0) | 2021.10.17 |
---|---|
[Algorithm] Dijkstra Algorithm (데이크스트라 알고리즘) (0) | 2021.10.05 |
[Algorithm] 다이나믹 프로그래밍 타일링 문제 풀어보기 (2/2) (백준 2133번, 14852번 ) (0) | 2021.09.26 |
[Algorithm] 다이나믹 프로그래밍 타일링 문제 풀어보기 (1/2) (백준 11726번, 11727번) (0) | 2021.09.26 |
[Algorithm] 다이나믹 프로그래밍 (0) | 2021.09.26 |