[제로베이스 데이터 취업스쿨] 23.06.15 스터디 노트

김준호·2023년 6월 15일
0
post-thumbnail

오늘부터 기초수학 수업을 들었다.

기초수학

1. 약수

어떤 수를 나누어 떨어지게 하는 수

실습1. 사용자가 입력한 숫자 약수 구하기

inputNum = int(input('숫자 입력: '))

for i in range(1,inputNum):
    if inputNum % i == 0:
        print(f'{i}는 {inputNum}의 약수')
숫자 입력: 10
1는 10의 약수
2는 10의 약수
5는 10의 약수

2. 소수

1과 자신만을 약수로 가지는 수 (단,1은 제외)

실습1. 사용자가 입력한 숫자까지 소수와 합성수를 구분지어 보자.

inputNum = int(input('숫자 입력: '))

for i in range(1,inputNum+1):
    flag = True
    for n in range(2,i):
        if i % n == 0:
            flag = False
            break

    if flag:
        print(f'{i}는 소수')
    else:
        print(f'{i}는 합성수 ')
숫자 입력: 10
2는 소수
3는 소수
4는 	합성수 
5는 소수
6는 	합성수 
7는 소수
8는 	합성수 
9는 	합성수 
10는 	합성수 

3. 소인수와 소인수분해

  • 소인수 : 약수(인수) 중에서 소수인 숫자
  • 소인수분해 : 1보다 큰 정수를 소인수의 곱으로 나타낸 것

실습1. 사용자가 입력한 수를 소인수 분해 해보자

inputNum = int(input('1보다 큰 정수 입력: '))
n=2
while n<= inputNum:
    if inputNum % n ==0:
        print(f'소인수 :{n}')
        inputNum /= n
    else:
        n+=1
1보다 큰 정수 입력: 12
소인수 :2
소인수 :2
소인수 :3

실습2. 입력한 값을 소인수 분해하고 홀수개인 소인수만 리스트에 넣어보자.

  • count(n)함수 : 리스트 안의 데이터 중 n의 개수를 알려주는 함수
  • remove(n)함수 : 리스트 안의 데이터 중 n을 삭제해 주는 함수
inputNum = int(input('1보다 큰 정수 입력: '))

n = 2
searchNumbers = []
while n <= inputNum:
    if inputNum % n == 0:
        print(f'소인수 : {n}')
        if searchNumbers.count(n) == 0:
            searchNumbers.append(n)
        elif searchNumbers.count(n)==1:
            searchNumbers.remove(n)
        inputNum /= n
    else:
        n+=1
print(f'searchNumbers : {searchNumbers}')
소인수 : 2
소인수 : 2
소인수 : 3
searchNumbers : [3]

4. 최대공약수

  • 공약수 : 두개 이상의 수에서 공통된 약수
  • 최대공약수 : 공약수 중 가장 큰 수

실습1. 입력한 두 수의 공약수와 최대공약수를 구해보자.

num1 = int(input('숫자1 입력: '))
num2 = int(input('숫자2 입력: '))
maxNum = 0
for i in range(1, num1+1):
    if num1 % i == 0 and num2 % i == 0:
        print(f'{i}는 {num1}과 {num2}의 공약수')
        maxNum = i

print(f'{num1}과{num2}의 최대공약수는 {maxNum}')
숫자1 입력: 20
숫자2 입력: 40
1는 20과 40의 공약수
2는 20과 40의 공약수
4는 20과 40의 공약수
5는 20과 40의 공약수
8는 20과 40의 공약수
10는 20과 40의 공약수
20는 20과 40의 공약수
20과40의 최대공약수는 20
  • 유클리드 호제법 : x,y의 최대공약수는 y, x%y의 최대공약수와 같다.

실습2. 유클리드 호제법을 이용한 최대공약수 구하기

num1 = int(input('숫자 입력 1: '))
num2 = int(input('숫자 입력 2: '))

temp1 = num1
temp2 = num2

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

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

for i in range(1,num1+1):
    if temp1 % i ==0:
        print(f'{num1},{num2}의 공약수 : {i}')
숫자 입력 1: 12
숫자 입력 2: 36
12와 36의 최대공약수 : 12
12,36의 공약수 : 1
12,36의 공약수 : 2
12,36의 공약수 : 3
12,36의 공약수 : 4
12,36의 공약수 : 6
12,36의 공약수 : 12

5. 최소공배수

  • 공배수 : 두개 이상의 수에서 공통된 배수
  • 공배수 중 가장 작은 수

실습1. 두개 숫자의 최소공배수 구하기


num1 = int(input('숫자 입력 1: '))
num2 = int(input('숫자 입력 2: '))
maxNum = 0
for i in range(1,num1+1):
    if num1 % i == 0 and num2 % i ==0:
        maxNum = i

        minNum = num1*num2 // i
print(f'{num1}과{num2}의 최소공배수 : {minNum}')
숫자 입력 1: 10
숫자 입력 2: 12
10과12의 최소공배수 : 60

실습2. 세개 숫자의 최소공배수 구하기

ship1 = 3;ship2=4; ship3=5

maxDay = 0
#ship1과 ship2의 최대공약수
for i in range(1,(ship1+1)):
    if ship1 % i ==0 and ship2 % i ==0:
        maxDay = i

#ship1과 ship2의 최소공배수
minDay = (ship1 * ship2) // maxDay

newDay = minDay
#newDay 와 ship3의 최대공약수
for i in range(1,(newDay+1)):
    if newDay % i ==0 and ship3 % i ==0:
        maxDay = i

#newDay와 ship3의 최소공배수 = ship1, ship2, ship3의 최소공배수
minDay = (newDay * ship3) // maxDay
print(f'{ship1},{ship2},{ship3}의 최소공배수: {minDay}')
3,4,5의 최소공배수: 60

진법

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

  • 10진수 --> 2,8,16진수 변환
dNum = int(input('십진수 입력'))

print(f'{dNum}의 2진수: {type(bin(dNum))}')
print(f'{dNum}의 8진수: {oct(dNum)}')
print(f'{dNum}의 16진수: {hex(dNum)}')
십진수 입력32
32의 2진수: 0b100000
32의 8진수: 0o40
32의 16진수: 0x20

결과창에 나온 진법들의 앞에 0b, 0o, 0x는 각각 2진수, 8진수, 16진수를 표시한 것

다른 방법으로도 변환 할 수 있다.

dNum = int(input('십진수 입력'))
print('{0:#b}, {0:#o}, {0:#x}'.format(dNum))
십진수 입력32
0b100000, 0o40, 0x20

진법 표시를 없애고 싶으면 코드에 '#'을 지우면 된다.

dNum = int(input('십진수 입력'))
print('{0:b}, {0:o}, {0:x}'.format(dNum))
십진수 입력32
100000, 40, 20

등차수열

연속된 두 항의 차이가 일정한 수열

  • 일반항 공식 :
  • 등차 중항 공식:
  • 등차 수열의 합 공식:

실습1. 초항, 공차, n번째 입력해서 n번째 항의 값 출력하기

inputN1 = int(input('첫번째 항: '))
inputD = int(input('공차 : '))
inputN = int(input('n번째 항까지: '))

n=1
valueN = 0

while n <= inputN:
    if n == 1:
        valueN = inputN1
        print(f'{n}번째 항의 값 : {valueN}')
        n+=1
        continue
    valueN += inputD
    print(f'{n}번째 항의 값 : {valueN}')
    n+=1
첫번째 항: 2
공차 : 3
n번째 항까지: 7
1번째 항의 값 : 2
2번째 항의 값 : 5
3번째 항의 값 : 8
4번째 항의 값 : 11
5번째 항의 값 : 14
6번째 항의 값 : 17
7번째 항의 값 : 20

공식사용

inputN1 = int(input('첫번째 항: '))
inputD = int(input('공차 : '))
inputN = int(input('n번째 항까지: '))

valueN = inputN1 + (inputN -1)*inputD
print(f'{inputN}번째 항의 값: {valueN}')
첫번째 항: 2
공차 : 3
n번째 항까지: 7
7번째 항의 값: 20

실습2. n항 까지의 값들의 합

inputN1 = int(input('첫번째 항: '))
inputD = int(input('공차 : '))
inputN = int(input('n번째 항까지: '))
valueN = 0
n = 1
sumN = 0
while n <= inputN:
    if n == 1:
        valueN = inputN1
        sumN += valueN
        print(f'{n}번째 항의 값까지의 합: {sumN}')
        n+=1
        continue
    valueN += inputD
    sumN += valueN
    print(f'{n}번째 항의 값까지의 합 : {sumN}')
    n +=1
첫번째 항: 5
공차 : 4
n번째 항까지: 7
1번째 항의 값까지의 합: 5
2번째 항의 값까지의 합 : 14
3번째 항의 값까지의 합 : 27
4번째 항의 값까지의 합 : 44
5번째 항의 값까지의 합 : 65
6번째 항의 값까지의 합 : 90
7번째 항의 값까지의 합 : 119

공식이용

inputN1 = int(input('첫번째 항: '))
inputD = int(input('공차 : '))
inputN = int(input('n번째 항까지: '))
valueN = 0
sumN = 0

valueN = inputN1 +(inputN -1)*inputD
sumN = inputN*(inputN1+valueN)/2

print(f'{inputN}까지 합 = {int(sumN)}')
첫번째 항: 5
공차 : 4
n번째 항까지: 7
7까지 합 = 119

등비수열

연속된 두 항의 비가 일정한 수열

  • 일반항 공식
  • 등비 중항 구하는 식
  • 등비 수열의 합 공식

실습1. 초항, 공차, n번째 입력해서 n번째 항의 값 출력하기

  • 등차수열에서 valueN += inputD 를 valueN *= inputR로 변경 된 것.
inputN1 = int(input('첫번째 항: '))
inputR = int(input('공비 : '))
inputN = int(input('n번째: '))
valueN = 0
n = 1
sumN = 0

while n <= inputN:
    if n == 1:
        valueN = inputN1
        print(f'{n}항 값 : {valueN}')
        n+=1
        continue

    valueN *= inputR
    print(f'{n}항 값 : {valueN}')
    n+=1
첫번째 항: 2
공비 : 2
n번째: 7
1항 값 : 2
2항 값 : 4
3항 값 : 8
4항 값 : 16
5항 값 : 32
6항 값 : 64
7항 값 : 128

공식이용

inputN1 = int(input('첫번째 항: '))
inputR = int(input('공비 : '))
inputN = int(input('n번째: '))
valueN = inputN1 * inputR ** (inputN-1)
print(f'{inputN}항 값 : {valueN}')
첫번째 항: 2
공비 : 2
n번째: 7
7항 값 : 128

실습2. n항 까지의 값들의 합

  • 마찬가지로 등차수열의 합에서 valueN *= inputR 만 변경
inputN1 = int(input('첫번째 항: '))
inputR = int(input('공비 : '))
inputN = int(input('n번째: '))

valueN = 0
sumN = 0
n = 1

while n <= inputN:
    if n == 1:
        valueN = inputN1
        sumN = valueN
        print(f'{n}항까지의 합 : {sumN}')
        n+=1
        continue

    valueN *= inputR
    sumN += valueN
    print(f'{n}항까지의 합 : {sumN}')
    n += 1
첫번째 항: 5
공비 : 3
n번째: 7
1항까지의 합 : 5
2항까지의 합 : 20
3항까지의 합 : 65
4항까지의 합 : 200
5항까지의 합 : 605
6항까지의 합 : 1820
7항까지의 합 : 5465

공식이용

inputN1 = int(input('첫번째 항: '))
inputR = int(input('공비 : '))
inputN = int(input('n번째: '))

sumN  = inputN1*(1-(inputR ** inputN)) / (1-inputR)
print(f'{inputN}번째 항 까지의 합 : {int(sumN)}')
첫번째 항: 5
공비 : 3
n번째: 7
7번째 항 까지의 합 : 5465
profile
취업공부

0개의 댓글