📗 10일차 공부 내용 요약
[ 기초수학과 파이썬 ]
1. 약수와 소수 : 약수와 소수의 개념을 알아보고, 파이썬으로 구현해보았다
2. 최대공약수와 최소공배수 : 공약수, 최대공약수, 공배수, 최소공배수의 개념을 알아보고, 파이썬으로 구현해보았다.
3. 진법 : 2,8,10,16진법의 개녑을 알아보고, 파이썬으로 구현해보았다.
4.수열과 등차수열 : 수열과 등차수열의 개념,공식을 알아보고 파이썬으로 구현해보았다.
📖 10일차 공부 내용 자세히
1. 약수와 소수
■ 약수
- 어떤 수를 나누어 떨어지게 하는 수
- 모든 정수는 1과 자기 자신을 약수로 가진다
- EX) 2의 약수 [ 1,2 ] 9의 약수 [ 1, 3, 9 ] 22의 약수 [ 1, 2, 11, 22 ]
■ 소수
- 1과 자기 자신만을 약수로 가지는 수
- 단, 1은 제외 한다
- EX) 2, 3, 5, 7, 11, 13, 17, 19
■ 합성수
- 1보다 큰 자연수 중에서 소수가 아닌 수
- 합성수는 3개 이상의 약수를 갖는다
- 1은 소수도 아니고 합성수도 아니다
■ 소인수분해
- 1보다 큰 정수를 소인수의 곱으로 나타낸 것을 소인수분해라고 한다
- 소인수 = 소수이면서 약수인 수
- ex. 12의 소인수 [ 2,3] 25의 소인수 [ 5 ] 36의 소인수 [ 2, 3 ]
약수 구하기
inputNum = int(input('정수 입력 : '))
for number in range(1,inputNum+1):
if inputNum % number == 0:
print(f'{inputNum}의 약수 : {number}')
소수 구하기
inputNum = int(input('정수 입력 : '))
for number in range(1,inputNum+1):
if inputNum % number == 0:
print(f'{inputNum}의 약수 : {number}')
소인수 분해 하기
inputNum = int(input('1보다 큰 정수: '))
n = 2
while n <= inputNum:
if inputNum % n == 0: #n으로 나눠준다
print(f'소인수 : {n}')
inputNum /= n #n로 나눈 값을 다시 인풋넘버로 올려서 반복한다
else:
n += 1
2. 최대공약수와 최소공배수
■ 공약수
- 2개 이상의 수 에서 공통된 약수
- ex) 30과 60의 공약수 [ 1, 2, 3, 4, 6, 12 ]
■ 최대 공약수
- 공약수 중에서 가장 큰 수
- 소인수 분해를 이용하면 최대공약수 및 공약수를 구할 수 있다
- 최대공약수 = 공통인 소인수의 거듭제곱에서 지수가 작은 수를 모두 곱한다
- ex) 12 = 2² *x3 , 20 = 2² x 5 ⇒ 최대공약수 2² = 4
- 최대 공약수의 약수는 공약 수 이다
- ex) 18과 24의 최대 공약수 : 6 , 공약수 : 1, 2, 3, 6
■ 공배수
- 2개 이상의 수 에서 공통된 배수
- ex) 3과 5의 공배수 [ 115, 30, 45 … ]
■ 최소공배수
- 공약수 중에서 가장 작은 수
- 소인수 분해를 이용하면 최소공배수 및 공배수를 구할 수 있다
- 최소공배수 = 공통인 소인수의 거듭제곱에서 지수가 크고 공통아닌 수를 모두 곱한다
- ex) 12 = 2² *x3 , 4 = 2² ⇒ 최대공약수 2² x 3= 12
- 최대 배수의 베수는 공배수 이다
- ex) 4과 6의 최대 공배수 : 12 , 공약수 : 12, 24, 36, …
- 최소 공배수 = 두 정수의 곲 // 최대공약수
- 두 정수의 곲 = 최소공배수 * 최대공배수
최대 공약수 구하기
#num1이 작은 수
num1 = int(input('1보다 큰 정수 입력 : '))
num2 = int(input('1보다 큰 정수 입력 : '))
maxNum = 0
for n in range(1,num1+1):
if num1 % n == 0 and num2 % n== 0:
print(f'{num1}과 {num2}의 공약수 : {n}')
maxNum = n
print(f'{num1}과 {num2}의 최대공약수 : {maxNum}')
최소공배수 구하기
num1 = int(input('1보다 큰 정수 입력 : '))
num2 = int(input('1보다 큰 정수 입력 : '))
maxNum = 0
for n in range(1,num1+1):
if num1 % n == 0 and num2 % n== 0:
print(f'공약수 : {n}')
maxNum = n
print(f'최대공약수 : {maxNum}')
minNum = (num1 * num2) // maxNum
print(f'최소공배수 : {minNum}')
3. 진법
■ 진법이란 특정 숫자 몇개를 사용하여 수를 표시하는 방법
- 2진법 : 0 ~1 / 2개사용
- 8진법 : 0~7 / 8개사용
- 10진법: 0~9 / 10개사용
- 16진법:0~16 /16개사용
특정 진수로 바꾸기
dNum =30
#10진수 => 2진수 / 변환 결과는 문자열!
#함수 활용
print('2진수: {}'.format(bin(dNum)))
print('8진수: {}'.format(oct(dNum)))
print('16진수:{}'.format(hex(dNum)))
#format()함수
print('2진수: {}'.format(format(dNum, '#b')))
print('8진수: {}'.format(format(dNum, '#o')))
print('16진수:{}'.format(format(dNum, '#x')))
#x진수 => 10진수
print('2진수(0b11110) -> 10진수({})'.format(int('0b11110',2)))
print('8진수(0o36) -> 10진수({})'.format(int('0o36',8)))
print('16진수(0x1e) -> 10진수({})'.format(int('0x1e',16)))
#x진수 => x진수
print('2진수(0b11110) -> 8진수({})'.format(oct(0b11110)))
print('2진수(0b11110) -> 10진수({})'.format(int(0b11110)))
print('2진수(0b11110) -> 16진수({})'.format(hex(0b11110)))
print('8진수(0o36) -> 2진수({})'.format(bin(0o36)))
print('8진수(0o36) -> 10진수({})'.format(int(0o36)))
print('8진수(0o36) -> 16진수({})'.format(hex(0o36)))
print('16진수(0x1e) -> 2진수({})'.format(bin(0x1e)))
print('16진수(0x1e) -> 8진수({})'.format(oct(0x1e)))
print('16진수(0x1e) -> 10진수({})'.format(int(0x1e)))
4.수열과 등차수열
■ 수열
- 규칙성을 가지고 나열되어 있는 수들
■ 등차수열
- 연속된 두 항의 차이가 일정한 수열
- 두 항의 차이를 공차(d)라고 한다
- 일반항 : an = a1 + (n-1)d
- 등차중앙 (연속된 세 항에서 가운데 항) : 양 두항의 합 /2
- 등차수열의 합 :: sn = n(a1 + an) /2
등차수열 n번째 항의 값 구하기
#반복문으로 구하기
inputN1 = int(input('a1 입력 : '))
inputD = int(input('공차 입력 : '))
inputN = int(input('n 입력:'))
valueN = 0
n = 1
while n <= inputN :
if n == 1 :
valueN= inputN1
print('{}번째 항의 값 : {}'.format(n, valueN))
n += 1
continue
valueN += inputD
print('{}번째 항의 값 : {}'.format(n, valueN))
n += 1
print('{}번째 항의 값 : {}'.format(inputN, valueN))
#공식으로 구하기
inputN1 = int(input('a1 입력 : '))
inputD = int(input('공차 입력 : '))
inputN = int(input('n 입력:'))
valueN = inputN1 + (inputN -1)*inputD
print('{}번째 항의 값 : {}'.format(inputN, valueN))
등차수열 n번째 항까지의 합 구하기
#반복문으로 구하기
inputN1 = int(input('a1 입력 : '))
inputD = int(input('공차 입력 : '))
inputN = int(input('n 입력:'))
valueN = 0
sum = 0
n = 1
while n <= inputN :
if n == 1 :
valueN= inputN1
sum += valueN
print('{}번째 항까지의 합 : {}'.format(n, sum))
n += 1
continue
valueN += inputD
sum += valueN
print('{}번째 항까지의 합 : {}'.format(n, sum))
n += 1
print('{}번째 항까지의 합 : {}'.format(inputN, sum))
#공식으로 구하기
inputN1 = int(input('a1 입력 : '))
inputD = int(input('공차 입력 : '))
inputN = int(input('n 입력:'))
valueN = inputN1 + (inputN -1) * inputD
sum = inputN * (inputN1 + valueN) / 2
print('{}번째 항까지의 합 : {}'.format(inputN, int(sum)))
➰ 10일차 후기
중학생 때 배웠던 개념들을 다시 배우니, 기억이 나면서도 또 뚜렷하게 생각나진 않으니 다시 외워야 하는 게 생긴 기분이다.
그래도 이해하는 데 오래 걸리진 않으니 다행이다만 파이썬으로 구현하는 건 또 다른 문제인 듯 하다.
이전 예제들에서 공약수와 공배수 를 활용하는 것들이 많았는데 이번 공부로 명확하게 잡힌 것 같아 좋다.
그만큼 자주 활용될 듯 하니 잘 짚어두자~
※본 내용은 제로베이스 데이터 취업 스쿨에서 제공하는 학습 내용에 기반합니다.
'제로베이스 데이터 스쿨 > 일일 스터디 노트' 카테고리의 다른 글
12일차 스터디노트 / 기초수학 순열, 조합, 확률, 연습문제 풀이 + 파이썬 / 제로베이스 데이터 취업 스쿨 (0) | 2023.01.16 |
---|---|
11일차 스터디노트 / 기초수학 등비수열, 시그마, 계차수열, 피보나치수열, 군수열 + 파이썬/ 제로베이스 데이터취업스쿨 (1) | 2023.01.15 |
9일차 스터디노트 / 파이썬 예외, 텍스트 파일 연습문제 풀이 / 제로베이스 데이터 취업스쿨 (0) | 2023.01.14 |
8일차 스터디노트 / 파이썬 모듈, 클래스 연습문제 풀이 / 제로베이스 데이터 취업 스쿨 (0) | 2023.01.12 |
7일차 스터디노트 / 파이썬 텍스트 파일 쓰기, 읽기, 함수 연습문제 풀이/제로베이스 데이터 취업스쿨 (0) | 2023.01.11 |