1ν•™λ…„ (2023)/C μ–Έμ–΄

[C] C study mini project: ν•¨μˆ˜ - μ†Œμˆ˜ 좜λ ₯ ν”„λ‘œκ·Έλž¨

waterproof 2023. 7. 15. 14:32

[C] C study mini project: ν•¨μˆ˜

 

 

 


[1] 문제

 

문제 μ„€λͺ…

μ†Œμˆ˜μΈμ§€λ₯Ό κ²€μ‚¬ν•˜λŠ” ν•¨μˆ˜ check_prime()λ₯Ό μ‚¬μš©ν•˜μ—¬ 1λΆ€ν„° 100사이에 μ‘΄μž¬ν•˜λŠ” μ†Œμˆ˜λ“€μ„ λͺ¨λ‘ 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•΄λ³΄μž.

 

μž…μΆœλ ₯ μ˜ˆμ‹œ

 
 
 

[2] μ •λ‹΅

 

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
#include <stdio.h>
 
int check_prime(int num) {
    int i;
    
    if (num <= 1)
        return 0;  // 1 μ΄ν•˜μ˜ μˆ«μžλŠ” μ†Œμˆ˜κ°€ μ•„λ‹˜
    
    for (i = 2; i < num; i++) {
        if (num % i == 0)
            return 0;  // λ‚˜λˆ„μ–΄λ–¨μ–΄μ§€λŠ” μˆ«μžκ°€ μžˆμœΌλ©΄ μ†Œμˆ˜κ°€ μ•„λ‹˜
    }
    
    return 1;  // μ†Œμˆ˜μž„
}
 
int main() {
    int i;
    
    printf("1λΆ€ν„° 100μ‚¬μ΄μ˜ μ†Œμˆ˜λ“€:\n");
    
    for (i = 1; i <= 100; i++) {
        if (check_prime(i))
            printf("%d ", i);
    }
    
    printf("\n");
    
    return 0;
}
cs

 

 

 


[3] 해석

 

이 μ½”λ“œλŠ” 1λΆ€ν„° 100 μ‚¬μ΄μ˜ μ†Œμˆ˜λ₯Ό μ°Ύμ•„μ„œ 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ΄λ‹€.

 

 

1. μ†Œμˆ˜(Prime Number)λž€ 무엇인가?

μ†Œμˆ˜λŠ” 1κ³Ό 자기 μžμ‹  μ΄μ™Έμ˜ μ–‘μ˜ μ •μˆ˜λ‘œ λ‚˜λˆ„μ–΄λ–¨μ–΄μ§€μ§€ μ•ŠλŠ” 수λ₯Ό λ§ν•œλ‹€.

즉, μ•½μˆ˜κ°€ 1κ³Ό 자기 μžμ‹ λ§Œ μžˆλŠ” 수λ₯Ό μ†Œμˆ˜λΌκ³  ν•œλ‹€.

예λ₯Ό λ“€μ–΄, 2, 3, 5, 7, 11, 13 등이 μ†Œμˆ˜μ— ν•΄λ‹Ήν•©λ‹ˆλ‹€.

 

 

2. μ†Œμˆ˜ νŒλ³„ 방법:

μš°λ¦¬κ°€ μ–΄λ–€ 숫자λ₯Ό μ†Œμˆ˜μΈμ§€ μ•„λ‹Œμ§€ νŒλ³„ν•  λ•Œ, κ·Έ 숫자의 μ œκ³±κ·ΌκΉŒμ§€λ§Œ ν™•μΈν•˜λ©΄ μΆ©λΆ„ν•˜λ‹€.

예λ₯Ό λ“€μ–΄, 100을 μ†Œμˆ˜μΈμ§€ νŒλ³„ν•˜λ €λ©΄ 10κΉŒμ§€λ§Œ ν™•μΈν•˜λ©΄ λœλ‹€.

 

μ΄μœ λŠ” κ°„λ‹¨ν•˜λ‹€. μ–΄λ–€ μˆ«μžκ°€ μ†Œμˆ˜κ°€ μ•„λ‹ˆλΌλ©΄, λ°˜λ“œμ‹œ κ·Έ 숫자의 μ•½μˆ˜κ°€ 될 수 μžˆλŠ” μˆ«μžλŠ” μ œκ³±κ·Όμ„ κΈ°μ€€μœΌλ‘œ λŒ€μΉ­μ„±μ„ 가지기 λ•Œλ¬Έμ΄λ‹€.

 

예λ₯Ό λ“€μ–΄, 100을 μ˜ˆλ‘œ λ“€λ©΄:

 

1은 100의 μ•½μˆ˜μ΄λ‹€. (100 ÷ 1 = 100)

2도 100의 μ•½μˆ˜μ΄λ‹€. (100 ÷ 2 = 50)

4도 100의 μ•½μˆ˜μ΄λ‹€. (100 ÷ 4 = 25)

5도 100의 μ•½μˆ˜μ΄λ‹€. (100 ÷ 5 = 20)

10도 100의 μ•½μˆ˜μ΄λ‹€. (100 ÷ 10 = 10)

20도 100의 μ•½μˆ˜μ΄λ‹€. (100 ÷ 20 = 5)

25도 100의 μ•½μˆ˜μ΄λ‹€. (100 ÷ 25 = 4)

50도 100의 μ•½μˆ˜μ΄λ‹€. (100 ÷ 50 = 2)

 

μ΄λ ‡κ²Œ μ•½μˆ˜λŠ” 항상 μ œκ³±κ·Όμ„ κΈ°μ€€μœΌλ‘œ λŒ€μΉ­μ„±μ„ 가진닀. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— μš°λ¦¬λŠ” μ œκ³±κ·ΌκΉŒμ§€λ§Œ ν™•μΈν•˜λ©΄ λœλ‹€.

100의 μ œκ³±κ·Όμ€ μ•½ 10이닀. λ”°λΌμ„œ 100이 μ†Œμˆ˜μΈμ§€ νŒλ³„ν•  λ•ŒλŠ” 2λΆ€ν„° 10κΉŒμ§€λ§Œ ν™•μΈν•˜λ©΄ λœλ‹€.

λ§Œμ•½ 10보닀 큰 μ•½μˆ˜κ°€ μžˆλ‹€λ©΄, κ·Έ μ•½μˆ˜μ˜ ν•˜λ‚˜λŠ” λ°˜λ“œμ‹œ 10보닀 μž‘μ€ 값이 될 것이닀. 예λ₯Ό λ“€μ–΄, 100의 μ•½μˆ˜ 쀑 20이라면, λ‹€λ₯Έ μ•½μˆ˜ 쀑 ν•˜λ‚˜λŠ” 5κ°€ 될 것이닀. ν•˜μ§€λ§Œ 5λŠ” 이미 10보닀 μž‘μ€ κ°’μœΌλ‘œ ν™•μΈν•œ μ•½μˆ˜ 쀑에 μžˆλ‹€.

 

λ”°λΌμ„œ λΆˆν•„μš”ν•œ 계산을 ν”Όν•˜λ©΄μ„œλ„ μ œκ³±κ·ΌκΉŒμ§€λ§Œ ν™•μΈν•˜λ©΄ λͺ¨λ“  μ•½μˆ˜λ₯Ό νŒλ³„ν•  수 μžˆλ‹€. 이 방법을 μ‚¬μš©ν•˜λ©΄ μ†Œμˆ˜λ₯Ό 더 효율적으둜 찾을 수 μžˆλ‹€.

 


3. check_prime ν•¨μˆ˜:

  • 이 ν•¨μˆ˜λŠ” 주어진 숫자 num이 μ†Œμˆ˜μΈμ§€ μ•„λ‹Œμ§€λ₯Ό νŒλ³„ν•˜λŠ” 역할을 ν•œλ‹€.
  • num이 1보닀 μž‘κ±°λ‚˜ κ°™μœΌλ©΄ 0을 λ°˜ν™˜ν•˜μ—¬ μ†Œμˆ˜κ°€ μ•„λ‹ˆλΌκ³  μ²˜λ¦¬ν•œλ‹€. (1 μ΄ν•˜μ˜ μˆ«μžλŠ” μ†Œμˆ˜κ°€ μ•„λ‹˜)
  • 그렇지 μ•Šμ€ κ²½μš°μ—λŠ” for 루프λ₯Ό 톡해 iκ°€ 2λΆ€ν„° num μ΄μ „κΉŒμ§€μ˜ μˆ«μžλ“€λ‘œ λ‚˜λˆ„μ–΄ λ–¨μ–΄μ§€λŠ”μ§€ ν™•μΈν•œλ‹€.
  • λ§Œμ•½ num이 i둜 λ‚˜λˆ„μ–΄ 떨어지면 0을 λ°˜ν™˜ν•˜μ—¬ μ†Œμˆ˜κ°€ μ•„λ‹ˆλΌκ³  μ²˜λ¦¬ν•œλ‹€. (λ‚˜λˆ„μ–΄λ–¨μ–΄μ§€λŠ” μˆ«μžκ°€ 있으면 μ†Œμˆ˜κ°€ μ•„λ‹˜)
  • for 루프λ₯Ό λͺ¨λ‘ λŒμ•˜λŠ”λ°λ„ μœ„ 두 κ²½μš°μ— ν•΄λ‹Ήν•˜μ§€ μ•ŠμœΌλ©΄ 1을 λ°˜ν™˜ν•˜μ—¬ μ†Œμˆ˜μž„μ„ μ•Œλ €μ€€λ‹€.

 

 

4. main ν•¨μˆ˜:

  • 이 ν•¨μˆ˜λŠ” ν”„λ‘œκ·Έλž¨μ˜ μ§„μž…μ μ΄λ‹€.
  • i λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜μ—¬ 1λΆ€ν„° 100κΉŒμ§€μ˜ 숫자λ₯Ό ν•˜λ‚˜μ”© μ¦κ°€μ‹œν‚€λ©΄μ„œ μ†Œμˆ˜μΈμ§€ check_prime ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜μ—¬ νŒλ³„ν•œλ‹€.
  • μ†Œμˆ˜μΈ 경우 ν•΄λ‹Ή 숫자λ₯Ό 좜λ ₯ν•œλ‹€.

 


5. C 언어와 μ†Œμˆ˜ κ΄€λ ¨ ν•¨μˆ˜:

C μ–Έμ–΄μ—μ„œλŠ” μ†Œμˆ˜λ₯Ό 닀루기 μœ„ν•΄ math.h λΌμ΄λΈŒλŸ¬λ¦¬μ— μ†Œμˆ˜ κ΄€λ ¨ ν•¨μˆ˜κ°€ ν¬ν•¨λ˜μ–΄ μžˆμ§€λŠ” μ•ŠλŠ”λ‹€.

λ”°λΌμ„œ 직접 μ†Œμˆ˜λ₯Ό νŒλ³„ν•˜λŠ” ν•¨μˆ˜λ₯Ό μž‘μ„±ν•΄μ•Ό ν•œλ‹€.

 

 


[4] 풀이 및 μ˜€λ‹΅

 

 

 


[5] μΆ”κ°€ ν•™μŠ΅

 

✏️ math.h λΌμ΄λΈŒλŸ¬λ¦¬λž€?

https://exponent.tistory.com/66

 

[C] math.h 라이브러리

math.hλŠ” μ—¬λŸ¬ μˆ˜ν•™ ν•¨μˆ˜λ“€μ„ ν¬ν•¨ν•˜λŠ” C μ–Έμ–΄μ˜ ν‘œμ€€ λΌμ΄λΈŒλŸ¬λ¦¬μ΄λ‹€. λŒ€λΆ€λΆ„μ˜ ν•¨μˆ˜λ“€μ΄ λΆ€λ™μ†Œμˆ˜μ μ„ 닀루며, κ°λ„λŠ” λΌλ””μ•ˆμ„ μ‚¬μš©ν•œλ‹€. 좜처 - μœ„ν‚€λ°±κ³Ό: https://ko.wikipedia.org/wiki/C_%EC%88%98%EC%8B%

exponent.tistory.com

 

 

 


[6] λŠλ‚€ 점

 

✏️ ν•¨μˆ˜λŠ” 이미 λ§Œλ“€μ–΄μ Έ μžˆλŠ” 것을 ν˜ΈμΆœν•΄μ„œ μ‚¬μš©ν•œλ‹€!!!!!! 기본의 기본의 기본적인 이야기...

 

✏️ μ†Œμˆ˜λ₯Ό νŒλ³„ν•  λ•ŒλŠ” 직접 μ½”λ“œλ₯Ό μž‘μ„±ν•΄μ•Ό ν•˜μ§€λ§Œ, math.h 라이브러리λ₯Ό μ΄μš©ν•˜λ©΄ λ‹€μ–‘ν•œ κΈ°λŠ₯을 μ‚¬μš©ν•  수 μžˆλ‹€λŠ” 것을 μ•Œμ•˜λ‹€. 직접 μ‚¬μš©ν•΄λ³΄λŠ” λ‚΄μš©μ˜ 글도 λ‹€μŒμ— μž‘μ„±ν•΄μ•Όμ§€!

 

✏️ μ•Œκ³ λ¦¬μ¦˜μ„ 잘 짜렀면... λ°˜λ³΅λ¬Έλ„ 잘 μ•Œμ•„μ•Ό ν•˜κ³  ν•¨μˆ˜λ„ μ΄ν•΄ν•΄μ•Όν•˜κ³ ... 곡뢀 μ—΄μ‹¬νžˆ ν•΄μ•Όκ² λ‹€...