λ‚˜μ˜ λͺ¨μ–‘

[Algorithm] μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체 λ³Έλ¬Έ

Algorithm

[Algorithm] μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체

kexon 2022. 7. 9. 13:14

πŸ’™ μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체?

  • κ³ λŒ€ 그리슀 μˆ˜ν•™μž μ—λΌν† μŠ€ν…Œλ„€μŠ€κ°€ λ°œκ²¬ν•œ μ†Œμˆ˜ νŒλ³„ μ•Œκ³ λ¦¬μ¦˜

🀍 μ•½μˆ˜(Divisor)?

  • 1κ³Ό 자기 μžμ‹  μ™Έ μ•½μˆ˜λ₯Ό 가지지 μ•ŠλŠ” 1보닀 큰 μžμ—°μˆ˜

🀍 μ†Œμˆ˜(Prime Number)?

  • μ–΄λ–€ 수λ₯Ό λ‚˜λˆ λ–¨μ–΄μ§€κ²Œ ν•˜λŠ” 수

πŸ’› μ•Œκ³ λ¦¬μ¦˜

  1. 2λΆ€ν„° μ†Œμˆ˜λ₯Ό κ΅¬ν•˜κ³ μž ν•˜λŠ” κ΅¬κ°„μ˜ λͺ¨λ“  수 λ‚˜μ—΄ (맨 처음 νšŒμƒ‰)
  2. 2 == μ†Œμˆ˜ (빨간색)
    1. Prime numbers: 2
    2. 자기 μžμ‹ μ„ μ œμ™Έν•œ 2의 배수 제거
  3. λ‚¨μ•„μžˆλŠ” 수 쀑, 3 == μ†Œμˆ˜ (μ΄ˆλ‘μƒ‰)
    1. Prime numbers: 2 3
    2. 자기 μžμ‹ μ„ μ œμ™Έν•œ 3의 배수 제거
  4. λ‚¨μ•„μžˆλŠ” 수 쀑, 5 == μ†Œμˆ˜ (νŒŒλž€μƒ‰)
    1. Prime numbers: 2 3 5
    2. 자기 μžμ‹ μ„ μ œμ™Έν•œ 5의 배수 제거
  5. λ‚¨μ•„μžˆλŠ” 수 , 7 == μ†Œμˆ˜ (λ…Έλž€μƒ‰)
    1. Prime numbers: 2 3 5 7
    2. 자기 μžμ‹ μ„ μ œμ™Έν•œ 7의 배수 제거
  6. μœ„μ˜ 과정을 λ°˜λ³΅ν•˜λ©΄ κ΅¬ν•˜λŠ” κ΅¬κ°„μ˜ λͺ¨λ“  μ†Œμˆ˜κ°€ λ‚¨κ²Œ 됨

πŸ’š μ½”λ“œ κ΅¬ν˜„

🀍 λ¬Έμ œ: μ†Œμˆ˜ νŒλ³„

  • 1 μ΄μƒμ˜ μžμ—°μˆ˜λ₯Ό μž…λ ₯λ°›μŒ
  • μ†Œμˆ˜μ΄λ©΄ true, μ•„λ‹ˆλ©΄ false 리턴

🀍 λ°˜λ³΅λ¬Έ μ‚¬μš©

public class Eratosthenes1 {
	public boolean isPrime(int num) {
    
    if(num == 1) 
      return false;

    for(int divisor = 2; divisor < num; divisor++) { // λ‚˜λˆ λ–¨μ–΄μ§€λŠ” μˆ˜κ°€ μžˆλŠ”μ§€ μ—†λŠ”μ§€ 확인
    // μ΄ˆκΈ°ν™”λ₯Ό 2λΆ€ν„° ν•˜λŠ”κ±΄ 1μ΄λž‘ 자기 μžμ‹  μ™Έ λ‚˜λˆ μ§€λŠ”κ²Œ μ—†μ–΄μ„œ

      if(num % divisor == 0)
        return false;
    }

    return true;
  }
}

🀍 Math 클래슀 μ‚¬μš©

public class Eratosthenes2 { 
	public boolean isPrime(int num) {
    
		// Math 클래슀 μ‚¬μš©
    int sqrt = (int)Math.sqrt(num);

    if(num == 1)
      return false;

    for(int i = 2; sqrt >= i; i++) {
      if(num % i == 0)
        return false;
    }

    return true;
	} 
}

πŸ’œ Ref.

 

μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체 - μœ„ν‚€λ°±κ³Ό, 우리 λͺ¨λ‘μ˜ 백과사전

 

ko.wikipedia.org

 

Comments