๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
CS/์•Œ๊ณ ๋ฆฌ์ฆ˜

์†Œ์ˆ˜(Prime Number) ๊ตฌํ•˜๊ธฐ ํšจ์œจ์  ์•Œ๊ณ ๋ฆฌ์ฆ˜ :: ์ฝ”๋“œ์ž๋ชฝ

by ๐ŸŒปโ™š 2019. 12. 22.

์†Œ์ˆ˜(Prime Number)

์†Œ์ˆ˜๋Š” ์ž์‹ ๋ณด๋‹ค ์ž‘์€ ๋‘๊ฐœ์˜ ์ž์—ฐ์ˆ˜๋ฅผ ๊ณฑํ•˜์—ฌ ๋งŒ๋“ค ์ˆ˜ ์—†๋Š” 1๋ณด๋‹ค ํฐ ์ž์—ฐ์ˆ˜์ด๋‹ค.
ex) 5๋Š” 5*1 ๋˜๋Š” 1*5๋กœ ์ˆ˜๋ฅผ ๊ณฑํ•ฉ ๊ฒฐ๊ณผ๋ฅผ ์ ๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์ด ๊ทธ ์ˆ˜ ์ž์‹ ์„ ํฌํ•จํ•˜๊ธฐ ๋•Œ๋ฌธ์— 5๋Š” ์†Œ์ˆ˜์ด๋‹ค.
 

์†Œ์ˆ˜ (์ˆ˜๋ก ) - ์œ„ํ‚ค๋ฐฑ๊ณผ, ์šฐ๋ฆฌ ๋ชจ๋‘์˜ ๋ฐฑ๊ณผ์‚ฌ์ „

์œ„ํ‚ค๋ฐฑ๊ณผ, ์šฐ๋ฆฌ ๋ชจ๋‘์˜ ๋ฐฑ๊ณผ์‚ฌ์ „. ์ขŒ์ธก์€ ์†Œ์ˆ˜, ์šฐ์ธก์€ ํ•ฉ์„ฑ์ˆ˜. ์†Œ์ˆ˜๋ž€ ์ž์‹ ๋ณด๋‹ค ์ž‘์€ ๋‘ ์ž์—ฐ์ˆ˜๋ฅผ ๊ณฑํ•˜์—ฌ ๋งŒ๋“ค ์ˆ˜ ์—†๋Š” 1๋ณด๋‹ค ํฐ ์ž์—ฐ์ˆ˜์ด๋‹ค. ์†Œ์ˆ˜(็ด ๆ•ธ, ๋ฐœ์Œ: [์†Œ์‘ค], ๋ฌธํ™”์–ด: ์”จ์ˆ˜, ์˜์–ด: prime number)๋Š” ์ž์‹ ๋ณด๋‹ค ์ž‘์€ ๋‘ ๊ฐœ์˜ ์ž์—ฐ์ˆ˜๋ฅผ ๊ณฑํ•˜์—ฌ ๋งŒ๋“ค ์ˆ˜ ์—†๋Š” 1๋ณด๋‹ค ํฐ ์ž์—ฐ์ˆ˜์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, 5๋Š” 1x5 ๋˜๋Š” 5x1๋กœ ์ˆ˜๋ฅผ ๊ณฑํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ ๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์ด ๊ทธ ์ˆ˜ ์ž์‹ ์„ ํฌํ•จํ•˜๊ธฐ ๋•Œ๋ฌธ์— 5๋Š” ์†Œ์ˆ˜์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ 6์€ ์ž์‹ ๋ณด๋‹ค ์ž‘์€ ๋‘ ์ˆซ์ž

ko.wikipedia.org

2, 3, 5, 7, 11 ... ๋“ฑ 1๊ณผ ์ž๊ธฐ ์ž์‹ ๋งŒ์„ ์•ฝ์ˆ˜๋กœ ๊ฐ–๋Š” ์ˆ˜๋ฅผ ์†Œ์ˆ˜๋ผ๊ณ  ํ•œ๋‹ค.

 

์†Œ์ˆ˜ ํŒ๋ณ„ํ•˜๊ธฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜

๊ธฐ๋ณธ์ ์œผ๋กœ ์†Œ์ˆ˜๋ฅผ ํŒ๋ณ„ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์–ด๋Š ์ˆ˜๊นŒ์ง€ ํŒ๋ณ„ํ•˜๋Š” ์ˆ˜๋ฅผ ๋‚˜๋ˆ ์„œ ๋‚˜๋จธ์ง€๊ฐ€ 0์ด ์•ˆ๋‚˜์˜ค๋ฉด ์†Œ์ˆ˜๋กœ ์ธ์ •ํ•œ๋‹ค. ๊ฐ€์žฅ ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•์„ ์ฐพ๊ธฐ ์œ„ํ•ด ์ ˆ์ฐจ์ ์œผ๋กœ ํ’€์ด๋ฅผ ํ™•์ธํ•ด๋ณด์ž.

 

ํ’€์ด1

์ฒซ๋ฒˆ์งธ ํ’€์ด๋Š” 2๋ถ€ํ„ฐ ํŒ๋ณ„ํ•˜๋Š” ์ˆ˜ ์ „๊นŒ์ง€ ๋‚˜๋ˆ ๋ณด๊ณ  ๋‚˜๋จธ์ง€๊ฐ€ 0์ด ์•ˆ๋‚˜์˜จ๋‹ค๋ฉด ์†Œ์ˆ˜๋กœ ์ •์˜ํ•œ๋‹ค. ํ•ด๋‹น ์ˆ˜๊นŒ์ง€ ๋ชจ๋‘ ํ™•์ธํ•ด์•ผํ•˜๋ฏ€๋กœ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(N)์ด ๋˜๊ณ , ๊ฐ€์žฅ ์›์ดˆ์ ์ธ ๋ฐฉ๋ฒ•์ด๋‹ค.

1
2
3
4
5
6
7
8
9
10
11
12
public class Main {
    public static boolean isPrime(int num){
        for(int i=2; i<num; i++){
            if(num % i == 0return false;
        }
        return true;
    }
    public static void main(String[] args) {
       System.out.println(isPrime(80));
       System.out.println(isPrime(79));
    }
}
 

 

ํ’€์ด2

๋‘๋ฒˆ์งธ๋Š” ํ•ด๋‹น์ˆซ์ž์˜ ์ ˆ๋ฐ˜๊นŒ์ง€๋งŒ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ์ด ์›๋ฆฌ๋Š” ์ ˆ๋ฐ˜ ์ด์ƒ์˜ ์ˆซ์ž๋“ค์€ ํ™•์ธ์ด ํ•„์š” ์—†๋Š” ์ˆซ์ž๋“ค์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด 80์ด๋ž€ ์ˆซ์ž์—์„œ ์ž๊ธฐ์ž์‹ ์„ ์ œ์™ธํ•˜๊ณ  ์ ˆ๋ฐ˜์„ ์ดˆ๊ณผํ•˜๋Š” ์ˆซ์ž์—์„œ ๋‚˜๋ˆด์„๋•Œ ๋‚˜๋จธ์ง€๊ฐ€ 0์ด๋˜๋Š” ์ˆซ์ž๋Š” ๋‚˜์˜ฌ์ˆ˜๊ฐ€ ์—†๋‹ค. ํ•ด๋‹น ํ’€์ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ตœ๋Œ€ N/2๋ฒˆ ์กฐํšŒ๋ฅผ ํ•œ๋‹ค. ์‹œ๊ฐ„๋ณต์žก๋„์—์„œ ์ƒ์ˆ˜๋Š” ์ œ์™ธํ•˜๋ฏ€๋กœ ํ•ด๋‹น ํ’€์ด์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋„ O(N)์ด ๋œ๋‹ค.

1
2
3
4
5
6
7
8
9
10
11
12
public class Main {
    public static boolean isPrime(int num){
        for(int i=2; i<=num/2; i++){
            if(num % i == 0return false;
        }
        return true;
    }
    public static void main(String[] args) {
       System.out.println(isPrime(80));
       System.out.println(isPrime(79));
    }
}
 

 

ํ’€์ด3

๋งˆ์ง€๋ง‰ ํ’€์ด๋Š” ๋‘๋ฒˆ์งธ ํ’€์ด์˜ ์›๋ฆฌ๋ฅผ ์กฐ๊ธˆ ์ธ์šฉํ•ด์„œ ์†Œ์ˆ˜๋ฅผ ํŒ๋ณ„ํ•˜๋Š” ๊ฐ€์žฅ ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ํ•ด๋‹น ์ˆซ์ž์˜ √N ๊นŒ์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ์ด ์›๋ฆฌ๋Š” ์•ฝ์ˆ˜์˜ ์ค‘์‹ฌ์„ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด 80์˜ ์•ฝ์ˆ˜๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

1, 2, 4, 5, 8, 10, 16, 20, 40, 80

๊ฐ ์ˆซ์ž๋“ค์˜ ๊ณฑ์ด 80์ด๋˜๋Š” ์Œ์„ ๊ฐ™์€ ์ƒ‰์œผ๋กœ ํ‘œ์‹œํ–ˆ๋‹ค. 1:80, 2:40, 4:20, 5:16, 8:10. √80์˜ ๊ฐ’์€ ๋Œ€๋žต 8.xxx์˜ ๊ฐ’์ด ๋‚˜์˜จ๋‹ค. ์ฆ‰ ์•ฝ์ˆ˜๋“ค์˜ ๊ณฑ์œผ๋กœ ๋ดค์„๋•Œ ๋ฃจํŠธ๋ฅผ ์”Œ์šด ๊ฐ’์ด ์ค‘๊ฐ„๊ฐ’์ด ๋œ๋‹ค. ์ด ์›๋ฆฌ๋Š” ์ด์šฉํ•˜์—ฌ 2์—์„œ๋ถ€ํ„ฐ √N์˜ ๊ฐ’๊นŒ์ง€ ๊ฒ€์ƒ‰์„ํ•œ๋‹ค๋ฉฐ ์ดํ›„์˜ ๊ฐ’์€ ํ™•์ธํ•  ํ•„์š”๊ฐ€ ์—†๊ฒŒ ๋œ๊ณ  ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(√N)์ด ๋œ๋‹ค. ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ์œ„ํ•ด ๋ฃจํŠธํ•จ์ˆ˜๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  i์˜ ์ œ๊ณฑ๊ฐ’์œผ๋กœ ํ™•์ธ์„ํ•œ๋‹ค.

1
2
3
4
5
6
7
8
9
10
11
12
public class Main {
    public static boolean isPrime(int num){
        for(int i=2; i*i<=num; i++){
            if(num % i == 0return false;
        }
        return true;
    }
    public static void main(String[] args) {
       System.out.println(isPrime(80));
       System.out.println(isPrime(79));
    }
}
 

 

 

๋ฐฑ์ค€ 1978๋ฒˆ ๋ฌธ์ œ :: ์†Œ์ˆ˜ ์ฐพ๊ธฐ

 

1978๋ฒˆ: ์†Œ์ˆ˜ ์ฐพ๊ธฐ

์ฒซ ์ค„์— ์ˆ˜์˜ ๊ฐœ์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. N์€ 100์ดํ•˜์ด๋‹ค. ๋‹ค์Œ์œผ๋กœ N๊ฐœ์˜ ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง€๋Š”๋ฐ ์ˆ˜๋Š” 1,000 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ด๋‹ค.

www.acmicpc.net

ํ’€์ด

์†Œ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ํ•จ๋“ค์–ด์„œ ์†Œ์ˆ˜์ธ์ง€ ํ•˜๋‚˜์”ฉ ํ™•์ธํ•œ๋‹ค.

 

Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import java.util.Scanner;
 
public class Main{
    public static boolean isPrime(int num){
        if(num < 2return false;
        for(int i=2; i*i<=num; i++){
            if(num % i == 0return false;            
        }
        return true;
    }
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int T = sc.nextInt();
        int result = 0;
        for(int i=0; i<T; i++){
            int num = sc.nextInt();
            if(isPrime(num)) result++;
        }
        System.out.println(result);
    }
}
 

 

๋Œ“๊ธ€