# Untitled

# 소수에 대해

### 신주환 기자

![Image](https://upload.cafenono.com/image/slashpageHome/20230511/155416_feDuNCiPS71hBNf3XO?q=75&s=1280x180&t=outside&f=webp)

소수는 나누어떨어지는 수가 1과 자신뿐인 수로 개념만 보면 단순해 보일 수 있다. 그러나 소수는 수학자들 사이에서 활발히 연구되는 수이다. 설명 전에 이 코드는 설명할 내용에 기본이 소수를 구하여 출력하는 코드이다.

```
import time

num = 0
x = 2
while True:
    for i in range(x-2):
            if x % (i+2)==0:
                num += 1
    if num == 0:
        print(x)
        time.sleep(0.5)
    num = 0
    x += 1
```

이 코드의 원리는 수에 1을 더해가며 그 수보다 작은 수를 모두 나눠 나누어 떨어지는 수가 1과 자신 뿐일때 출력하는 것이다.

# RSA암호

소수의 활용, 그 첫번째는 바로 RSA암호이다. RSA암호는 임의의 수 소수를 곱한 수를 주면 그 두 소수가 무엇인지 맞히는 암호이다. 두 소수를 곱하는 건 쉽지만 곱한 수를 소인수분해하는 과정은 굉장히 어렵기 때문에 이러한 암호가 탄생하게 된 것이다. 지금까지는 암호의 원리를 가장 간단하게 설명했지만 더 복잡하게 들어갈 수 있다. 다음은 임의의 두 소수를 곱해서 곱한 값을 출력하는 코드이다.

```
import random, time

x = 0

num = 0

list = [0, 0]

while list[0] == 0:

 x = random.randint(0, 10000)

 for i in range(x-2):

  if x % (i+2)==0:

   num += 1

 if num == 0:

  list[0] = x

  

 num = 0

 time.sleep(0.5)

while list[1] == 0:

 x = random.randint(0, 10000)

 for o in range(x-2):

  if x % (o+2)==0:

   num += 1

 if num == 0:

  list[1] = x

 num = 0

  

print(str(list[0]*list[1]))

```

이 코드는 앞선 코드의 원리를 바탕으로 두 임의의 소수를 구하고 곱하는 코드이다.

![이 코드를 돌린 결과 34640141라는 수가 나왔다](https://upload.cafenono.com/image/slashpageHome/20230511/152529_MWorkxEFLxbj1jmXtB?q=75&s=1280x180&t=outside&f=webp)

 다음은 암호해독 코드이다.

```
x = 1

num = 0

ip = int(input("num: "))

import time

while True:

 x += 1

 for i in range(x-2):

  if x % (i+2)==0:

   num += 1

 if ip % x == 0:

  print(str(x) + ', ' + str(ip/x))

  break

 num = 0

```

다음 코드의 원리는 입력된 암호문에 소수를 2부터 차례대로 대입하여 나누었을 때, 나누어떨어지고 나눈 값이 소수인지를 판별해서 그 두 조건이 모두 일치하면 출력하는 방식이다. 

![해독 결과 4483, 7727이라는 두 소수가 나왔다. (계산시간 1초 미만)](https://upload.cafenono.com/image/slashpageHome/20230511/152619_Pqjwg6NaGg1oJX1iCQ?q=75&s=1280x180&t=outside&f=webp)

파이선 코딩은 이런 식이다. 컴퓨터는 사람이 아니기 때문에 소수를  구하라고 해도 이 같은 일명 노가다를 해야한다. 하지만 컴퓨터는 빠르기 때문에 다음과 같이 몇십만개의 수를 대입하여 구하는 과정도 1초안에 해결할 수 있다.

# 골드바흐의 추측

이것도 코드다. 무슨 코든지는 말하지 않겠어 ;)

```
#modules
import time
#var
number = 2
x = 1
num = 0
list = [0, 0]
#main_code
while True:
    x += 1
    for i in range(x-2):
            if x % (i+2)==0:
                num += 1
    if num == 0:
        for o in range(number - x-2):
            if (number - x) % (o+2)==0:
                num += 1 
        if num == 0:
            print(str(number) + ', ' + str(x) + ', ' + str(int(number - x)))
            number += 2
            x = 1
            time.sleep(0.5)
    num = 0
    i = 0
    o = 0
```

[다른 기사 보기](https://slashpage.com/math/3dk58wg2enpz7mnqevxz)

For the site tree, see the [root Markdown](https://slashpage.com/math.md).
