스터디노트(수학 1~3)

zoe·2023년 3월 14일
0

약수와 소수

  • 약수 : 어떤 수를 나누어 떨어지게 하는 수
  • 소수 : 1과 자신만을 약수로 가지는 수(단, 1은 제외)

1부터 30까지의 숫자 중 5로 나눈 몫과 나머지가 모두 소수인 숫자

  • 12, 13, 17, 18, 27, 28
    - 몫으로 나올 수 있는 소수 찾기
    - 5*몫 + 5보다 작은 소수

1부터 30까지의 숫자 중 소수

  • 2, 3, 5, 7, 11, 13, 17, 19, 23, 29

💡 약수와 소수(파이썬)

파이썬을 이용해서 사용자가 입력한 숫자의 약수를 출력

# 파이썬을 이용해서 사용자가 입력한 숫자의 약수를 출력

inputNumber = int(input('0보다 큰 정수 입력 : '))

for number in range(1, inputNumber + 1):
    if inputNumber % number == 0:
        print('{}의 약수 : {}' .format(inputNumber, number))

💡 파이썬을 이용해서 사용자가 입력한 숫자까지의 소수를 출력

# 파이썬을 이용해서 사용자가 입력한 숫자까지의 소수를 출력

inputNumber = int(input('0보다 큰 정수 입력 : '))

for number in range(2, inputNumber+1): # 소수는 2부터! ★
    flag = True
    for n in range(2, number):
        if number % n == 0:
            flag = False  # 더이상 반복하지 않아도 되므로 false 값을 주고, 반복에서 나옴 ★
            break # ★
    if (flag):
        print('{} : 소수!' .format(number))
    else:
        print('{} : 합성수!' .format(number))

💡 소인수와 소인수분해

  • 소인수 : 약수(인수) 중에서 소수인 숫자
    - 12의 소인수 ? (1, 2, 3, 4, 6, 12) → (2, 3)
    - 20의 소인수 ? (1, 2, 4, 5, 10, 20) → (2, 5)
  • 소인수분해 : 1보다 큰 정수를 소인수의 곱으로 나타낸 것, 약수를 정확하고 쉽게 구할 수 있음
    - 20의 소인수분해? (2 10 => 2 2 5) → (2^2 5)
    • 36의 소인수분해? (2 18 => 2 2 9 => 2 2 3 3) → (2^2 * 3^2)

다음의 수를 소인수분해를 통해서 약수 구하기

  • 14 : 2 * 7 → (1, 2, 7, 14)
  • 154 : 2 77 => 2 7 * 11 → (1, 2, 7, 14, 11, 22, 77, 154)
  • 1547 : 7 221 => 7 13 * 17 → (1, 7, 13, 17, 91 ,119, 1547)
  • 2025 : 5 405 => 5 5 81 => 5 5 9 9 → (1, 3, 5, 9, 15, 25, 27, 45, 75, 81, 135 ,225 ,405 , 675, 2025)

💡 소인수와 소인수분해(파이썬)

💡 파이썬을 이용해서 사용자가 입력한 수를 소인수분해

# 파이썬을 이용해서 사용자가 입력한 수를 소인수분해

inputNumber = int(input('1보다 큰 정수 입력 : '))

n = 2
while n <= inputNumber:
    if inputNumber % n == 0:
        print('소인수 : {}' .format(n))
        inputNumber /= n # inputNumber = inputNumber / n
    else :
        n += 1

💡 72에 x를 곱하면 y의 제곱이 된다고 할 때, x에 해당하는 가장 작은 정수 구하기

  • .count(n) : 리스트 안에 n의 개수 반환
  • .append(n) : 리스트 안에 n 추가
  • .remove(n) : 리스트 안의 n 제거
# 72에 x를 곱하면 y의 제곱이 된다고 할 때, x에 해당하는 가장 작은 정수

inputNumber = int(input('1보다 큰 정수 입력 : '))

n = 2
searchNumbers = []
while n <= inputNumber:
    if inputNumber % n == 0:
        print('소인수 : {}' .format(n))
        if searchNumbers.count(n) == 0: # .count(n) : 리스트 안에 n의 개수 반환
            searchNumbers.append(n) # .append(n) : 리스트 안에 n 추가
        elif searchNumbers.count(n) == 1: # 하나인 것만 찾기 위해 이미 하나가 있으면 두개가 되지 않도록 기존거 제거해서 0개로 만들기
            searchNumbers.remove(n) # .remove(n) : 리스트 안의 n 제거
        inputNumber /= n
    else:
        n += 1
print(f'72에 x를 곱하면 y의 제곱이 된다고 할 때, x에 해당하는 가장 작은 정수 : {searchNumbers}')

최대공약수

  • 공약수 : 두 개 이상의 수에서 공통된 약수
    - 36, 60의 공약수 : (1, 2, 3, 4, 6, 9, 12, 18, 36)(1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30, 60) → (1, 2, 3, 4, 6, 12)
    - 12, 52, 82의 공약수 : (1, 2, 3, 4, 6, 12)(1, 2, 4, 13, 26, 52)(1, 2, 41, 82) → (1, 2)
  • 최대공약수 : 공약수 중 가장 큰 수
  • 소인수분해를 이용하면 최대공약수 및 공약수를 구할 수 있음

다음 수의 최대공약수 및 공약수 구하기

  • 12, 54, 72의 최대공약수? 1223, 12333 , 122233 → 123 = 6
  • 25, 115, 255의 최대공약수 및 공약수? 155, 1523, 13517 → 15 = 5 (1, 5)

빵 112개와 우유 80개를 학생들한테 남김없이 동일하게 나누어 주려고 할 때,
최대 몇 명의 학생이 빵과 우유를 받을 수 있는지 계산해 보자.
그리고, 학생 한 명이 받게 되는 빵과 우유의 개수를 계산해 보자.

112 = 122227
80 = 1
22225

  • 2 x 2 x 2 x 2 = 최대16명
  • 학생 한명이 받게 되는 빵의 개수 : 7, 우유의 개수 : 5

최대공약수(파이썬)

  • 유클리드 호제법을 이용해서 최대공약수를 구할 수 있음

두 개의 수를 입력하면 공약수와 최대공약수를 출력하는 코드를 작성

# 두 개의 수를 입력하면 공약수와 최대공약수를 출력하는 코드를 작성
#(첫 번째 입력한 숫자보다 두번째 입력한 숫자가 더 크다고 가정)

num1 = int(input('1보다 큰 정수 입력 : '))
num2 = int(input('1보다 큰 정수 입력 : '))
maxNum = 0

for i in range(1, (num1 + 1)):
    if num1 % i == 0 and num2 % i == 0:
        print('공약수 : {}' .format(i))
        maxNum = i

print('최대공약수 : {}' .format(maxNum))

세 개의 수를 입력하면 공약수와 최대공약수를 출력하는 코드를 작성

# 세 개의 수를 입력하면 공약수와 최대공약수를 출력하는 코드를 작성

num1 = int(input('1보다 큰 정수 입력 : '))
num2 = int(input('1보다 큰 정수 입력 : '))
num3 = int(input('1보다 큰 정수 입력 : '))
maxNum = 0

for i in range(1, num1 + 1):
    if num1 % i == 0 and num2 % i == 0 and num3 % i == 0:
        print('공약수 : {}' .format(i))
        maxNum = i
print('최대공약수 : {}' .format(maxNum))

💡 유클리드 호제법을 이용해서 최대공약수를 구하기

# 유클리드 호제법을 이용해서 최대공약수를 구하기

num1 = int(input('1보다 큰 정수 입력 : '))
num2 = int(input('1보다 큰 정수 입력 : '))

temp1 = num1; temp2 = num2

while temp2 > 0:
    temp = temp2
    temp2 = temp1 % temp2
    temp1 = temp

print(f'{num1}, {num2}의 최대공약수 : {temp1}')

for n in range(1, temp1 + 1):
    if temp1 % n == 0:
        print('{}, {}의 공약수 : {}'.format(num1, num2, n))

최대공배수

  • 공배수 : 두 개 이상의 수에서 공통된 배수
  • 최소공배수 : 공배수 중에 가장 작은 수
  • 소인수분해를 이용하면 최소공배수 및 공배수를 구할 수 있음

다음 수의 최소공배수 및 공배수를 구하기

  • 12, 21, 33의 최소공배수 및 공배수? (1, 2, 3, 4, 6, 12)(1, 3, 7, 21)(1, 3, 11, 33) → 1 3 4 7 11 = 924, 최소공배수 : 924, 공배수 : 924, 1848 ...
  • 12, 36, 48의 최소공배수 및 공배수? (1223)(12233)(122223) → 1223322 = 144, 최소공배수 : 144, 공배수 : 144, 288, ...

2, 5, 8 중 하나만 제외하고 나머지 두 개의 수는 5을 곱하여도 최소공배수에 변함이
없다. 5를 곱하였을 때 최소공배수에 변함이 있는 수 찾기

  • 2, 5, 8의 최소공배수 : 2 5 4 = 40
  • 10, 5, 8의 최소공배수 : 2 5 2 * 2 = 40
  • 2, 25, 8의 최소공배수 : 2 4 5 * 5 = 200
  • 2, 5, 40의 최소공배수 : 2 5 4 = 40

💡 최소공배수(파이썬)

💡 두 개의 수를 입력하면 최소공배수를 출력하는 코드를 작성

# 두 개의 수를 입력하면 최소공배수를 출력하는 코드를 작성

num1 = int(input('1보다 큰 정수 입력 : '))
num2 = int(input('1보다 큰 정수 입력 : '))
maxNum = 0

for i in range(1, num1 + 1):
    if num1 % i == 0 and num2 % i == 0:
        print('공약수 : {}' .format(i))
        maxNum = i

print('최대공약수 : {}' .format(maxNum))

minNum = (num1 * num2) // maxNum
print('최소공배수 : {}' .format(minNum))

💡 세 개의 수를 입력하면 최소공배수를 출력하는 코드를 작성

# 세 개의 수를 입력하면 최소공배수를 출력하는 코드를 작성

num1 = int(input('1보다 큰 정수 입력 : '))
num2 = int(input('1보다 큰 정수 입력 : '))
num3 = int(input('1보다 큰 정수 입력 : '))
maxNum = 0

for i in range(1, num1+1):
    if num1 % i == 0 and num2 % i == 0:
        maxNum = i
print('최대공약수 : {}' .format(maxNum))

minNum = int((num1 * num2) / maxNum)
print('{},{}의 최소공배수 : {}' .format(num1, num2, minNum))

newNum = minNum
for i in range(1, newNum+1):
    if newNum % i == 0 and num3 % i == 0:
        maxNum = i
print('최대공약수 : {}' .format(maxNum))
minNum = int((newNum * num3) / maxNum)
print('{},{},{}의 최소공배수 : {}' .format(num1, num2, num3, minNum))

섬마을에 과일, 생선, 야채를 판매하는 배가 다음 주기로 입항한다고 할 때, 모든 배가 입항하는 날짜를 계산

#섬마을에 과일, 생선, 야채를 판매하는 배가 다음 주기로 입항한다고 할 때,
#모든 배가 입항하는 날짜를 계산

ship1 = 3; ship2 = 4; ship3 = 5

maxDay = 0
for i in range(1,ship1+1):
    if ship1 % i == 0 and ship2 % i == 0:
        maxDay  = i

print('최대공약수 : {}' .format(maxDay))
minDay = int((ship1 * ship2) / maxDay)
print('{},{}의 최소공배수 : {}' .format(ship1, ship2, minDay))

newDay = minDay

for i in range(1, newDay+1):
    if newDay % i == 0 and ship3 % i == 0:
        maxNum = i

print('최대공약수 : {}' .format(maxDay))
minNum = int((newDay * ship3) / maxNum)
print('{},{},{}의 최소공배수 : {}' .format(ship1, ship2, ship3, minDay))
print(f'{minDay} 일마다 모든 선박이 입항합니다.')

진법

  • 진법 : 특정 숫자 몇 개를 사용하여 수를 표시하는 방법

💡 진법(파이썬)

  • bin() : binary, 10진수 → 2진수 변환
    - ex) 0b1110 : 0b → 2진수를 의미
  • oct() : octal, 10진수 → 8진수 변환
    - ex) 0o36 : 0o → 8진수를 의미
  • hex() : hexadecimal, 10진수 → 16진수 변환
    - ex) 0x1e : 0x → 2진수를 의미
dNum = 30
print('2진수 : {}' .format(bin(dNum)))
print('8진수 : {}' .format(oct(dNum)))
print('16진수 : {}' .format(hex(dNum)))

print('2진수(0b11110) -> 8진수({})' .format(oct(0b11110)))
print('2진수(0b11110) -> 10진수({})' .format(int(0b11110)))
print('2진수(0b11110) -> 16진수({})' .format(hex(0b11110)))

print('2진수 : {}' .format(format(dNum,'#b')))
print('8진수 : {}' .format(format(dNum,'#o')))
print('16진수 : {}' .format(format(dNum,'#x')))

print('{0:#b}, {0:#o}, {0:#x}' .format(dNum))

print('2진수 : {}' .format(format(dNum,'b'))) # 진수 표현 없애기 가능
print('8진수 : {}' .format(format(dNum,'o'))) # 진수 표현 없애기 가능
print('16진수 : {}' .format(format(dNum,'x'))) # 진수 표현 없애기 가능

print('2진수 : {}' .format(type(format(dNum,'b')))) # 결과는 문자열

print('2진수 : {}' .format(int('0b11110',2))) # 2진수를 10진수로 변환
print('8진수 : {}' .format(int('0o36',8))) # 8진수를 10진수로 변환
print('16진수 : {}' .format(format(int('0x1e',16)))) # 16진수를 10진수로 변환

print('2진수(0b11110) -> 8진수({})' .format(int('0b11110',2)))
print('2진수(0b11110) -> 10진수({})' .format(int('0o36',8)))
print('2진수(0b11110) -> 16진수({})' .format(format(int('0x1e',16))))

수열

  • 수열 : 규칙성을 가지고 나열되어 있는 수들
    - 특정항은 특정항까지의 합에서 특정항 이전의 항까지의 합과 같다
    - 수열 합 : an = sn - s(n-1) 단, n >= 2 크고, a1 = s1

다음 수열의 일반항을 구하기

  • 2, 5, 8, 11, 14, 17, 20, 23 : 3n - 1
  • 5, 9, 13, 17, 21, 25, 29, 33 : 4n + 1
  • 10, 13, 16, 19, 22, 25, 28, 31 : 3n + 7
  • 0, 4, 8, 12, 16, 20, 24, 28 : 4n - 4

등차수열

  • 등차수열 : 연속된 두 항의 차이가 일정한 수열
    - 공차 : 두 항의 차이
    - an = a1 + (n-1) * d
  • 등차 중항 : 연속된 세 항에서 가운데 항
    - ( an-1 + an+1 ) / 2
  • 등차수열의 합 : 2a1 + (n-1)d → sn = n(a1 + an)/2

다음 수열의 일반항을 구하기

  • 2, 5, 8, 11, 14, 17 : 2 + (n-1) * 3 = 2 + 2n - 3 = 2n - 1
  • 5, 9, 13, 17, 21, 25 : 5 + (n-1) * 4 = 5 + 4n - 4 = 4n + 1

💻 출처 : 제로베이스 데이터 취업 스쿨

profile
#데이터분석 #퍼포먼스마케팅 #데이터 #디지털마케팅

0개의 댓글