Prime Numbers 소수 [Python]

HyunMin Yang·2022년 8월 6일
1

Algorithm

목록 보기
1/4
post-thumbnail

소수 (Prime Number)

약수가 1과 자신뿐인 수

예제)
첫번째 수 = 6
약수 = 1,2,3,6
답 = 소수 아님

두번째 수 = 3
약수 = 1,3
답 = 소수

소수찾기

약수 찾기와 비슷하지만, 나누어지는게 있으면 소수가 아님
1과 N은 당연히 나눠지므로 범위는 2부터 N까지 해야한다

N = int(input())

for i in range(2,N):
  if N%i ==0:
    print("소수가 아님")
    break

위 코드는 입력된 수가 소수인지 아닌지를 판단해주는 코드이다. N이 2부터 N까지 돌면서 i가 되고 i가 N으로 나누어 떨어지는지 확인한다. 만약 나누어 떠러지면 소수가 아니고 나누어 떠러지지 않으면 소수이다.

함수로 찾는 방법 또한 있다

def is_prime(n):
  for i in range(2, n):
    if n % i == 0:
      return False
      break
  #return True
  else:
    return True

print(is_prime(17))

is_prime(n)에 입력된 숫자가 소수면 True, 소수가 아니면 False를 출력한다.

범위 내에서 소수찾기

N보다 작은 소수찾기

N = int(input())
prime_number = []

for i in range(2,N):
  if is_prime(i):
    prime_number.append(i)
print(prime_number)

이 코드는 for문이 N까지 돌면서 소수들을 list에 넣어 N까지의 모든 소수를 찾아준다.

M보다 크고 N보단 작은 소수찾기

M = int(input())
N = int(input())
prime_number = []

for i in range(M,N):
  if is_prime(i):
    prime_number.append(i)
print(prime_number)

range 범위를 M부터 N으로만 바꾸면 됨

에라토스테네스의 체

설명:

빈 리스트를 만들어 숫자의 인덱스와 숫자가 같다고 가정한다.
소수로 판면되면 True이고 아니면 False로 바꾼다.
마지막에 True인 친구들의 인덱스만 뽑아낸다.
방법:

N+1 개의 True가 담긴 리스트를 만든다
0과 1은 Flase로 만든다.
리스트를 처음부터 끝까지 반복하는데,
그 다음부터 True인 수를 만나면 그 수 외 배수들을 전부 False로 바꾼다.

def prime_list(n):
  sieve = [True]*(n+1)
  for i in range(2,int(n**(1/2))+1):
    if sieve[i] == True:
      for j in range(i*2, n, i):
        sieve[j] = False

  prime_number = []
  for i in range(2,n):
    if sieve[i]:
      prime_number.append(i)
  return prime_number

print(prime_list(100))

다양한 소수

쌍둥이소수

소수들 중 3과 5, 11과 13, 17과 19처럼 두 수의 차가 2인 소수
두 수의 차가 1인 소수는 2,3 말고는 없음

메르센소수

프랑스의 수도사였던 메르센의 이름을 따 만들어진 소수

소수를 간단한 식으로 표현하고 싶은 욕망이 있었던 메르센

그는 2^p - 1 은 소수이다 라는 가설을 세웠다. 맞는거 같았지만, p가 11일 때 2^11 - 1 = 2047이 나오고 이 수는 23과 89의 곱으로 표현된다.

이에 메르센은 p가 어떤 값일 때 소수가 되고 어떤 값일 때 소수가 되지 않는지 밝히고 싶었는데, "만약 p가 2, 3, 5, 7, 13, 17, 19, 31, 67, 127, 257 중 하나면 2^p-1은 소수이다" 라는 논문을 발표했다.

하지만 후에 67과 257는 소수가 아니고 61,89,107이 소수로 표현되어야 한다는 것을 알아냈다.

사람들은 2^p-1이 소수이면, 그것을 메르센 소수라고 부르고 있다.

profile
Hello World!

1개의 댓글

comment-user-thumbnail
2022년 8월 6일

끝!

답글 달기