230418_제로베이스데이터스쿨_기초수학_03_001~03_013

김지태·2023년 4월 19일
0
post-thumbnail

03_001 약수와 소수 1

약수 = 나누어 떨어지게 하는 수

소수 = 1, 자기 자신으로만 나누어 떨어지는 수

03_002 약수와 소수 2 - 파이썬

약수

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

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

소수

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

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

if (flag):
print('{} : 소수!!'.format(number))
else:
print('{} : \t\t합성수!!'.format(number))

03_003 소인수 분해

소인수 = 약수이면서 소수인 숫자

20의 약수는 1, 2, 4, 5, 10, 20 이 있는데 소인수는 2 와 5이다.

36의 약수는 1, 2, 3, 4, 9, 12, 18, 36 이고 소인수는 2, 3 이다.

소인수 분해

정수를 소인수의 곱으로 나타낸 것은 소인수 분해

20의 소인수 분해 = 2^2 * 5

03_004 소인수분해 2 파이썬 / 수를 소인수의 곱으로 나타내기

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

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

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

72 = 2^3 * 3^2 / 2만 더 곱해주면 됨

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

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

print(f'searchNumbers = {searchNumbers}')

03_005 최대 공약수

최대 공약수 : 공약수 중 가장 큰 수

공약수 : 두 개 이상의 수에서 공통된 약수

소인수 분해를 이용하면 최대공약수 및 공약수를 구할 수 있다. 공약수는 최대공약수의 약수라 보면 됨.

03_006 최대공약수 파이썬

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

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

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('{}, {}의 최대공약수: {}'.format(num1, num2, temp1))

03_007 최소공배수

최소 공배수 = 공통된 배수 중 가장 작은 수

공배수 = 공통된 배수 / 소인수분해로 최소공배수 구할 수 있음

03_008 최소공배수 - 파이썬

for문과 유클리드 호재법을 이용해서 최소공배수를 구해보자

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(num1, num2, maxNum))

minNum = (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 = 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(ship1, ship2, maxDay))

minDay = (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:
maxDay = i
print('배 {}, {}의 최대공약수 : {}'.format(ship1, ship2, maxDay))

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

03_009 진법 / 10진법 외의 진법

10진수 -> x 진수

x 진수 -> 10진수

03_010 진법(파이썬) / 파이썬을 통한 진법 전환

dNum = 30

print('2진수: {}'.format(bin(dNum)))
print('8진수: {}'.format(oct(dNum)))
print('16진수: {}'.format(hex(dNum)))

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

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

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)))

03_011 수열

수열 = 규칙을 가진 수들의 나열

an = 일반항 / 일반항은 식으로 도출 가능

Sn = a1부터 an 까지의 합

an = Sn - S(n-1) / n은 2보다 커야 & a1 = S1

03_012 등차 수열

등차 수열 = 차이가 같은 수열

an = a1 + (n-1) * d

Sn = n(a1+an) / 2

등차 중앙 = (an-1 + an+1) / 2

03_013 등차수열 파이썬

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))

profile
데이터 분석가

0개의 댓글