[2주차5일차] Chapter 03_기초수학 기초1~2

HA_·2023년 10월 20일

001. 약수와 소수

약수

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

소수

1과 자신만을 약수로 가지는 수 (단, 1은 제외)
ex) 2, 3, 5, 7, 11, 13, 17, 19 등

002. 약수와 소수 (파이썬)

약수

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

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

003. 소인수분해

소인수

약수(인수) 중에서 소수인 숫자를 소인수라고 한다.

소인수분해

1보다 큰 정수를 소인수의 곱으로 나타낸 것을 소인수분해라고 한다.

004. 소인수분해 (파이썬)

소인수분해

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

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

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

    else:
        n += 1

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:
            searchNumbers.append(n)
        elif searchNumbers.count(n) == 1:
            searchNumbers.remove(n)
        inputNumber /= n
    else:
        n += 1

print('searchNumber: {}'.format(searchNumbers))

005. 최대공약수

공약수

두 개 이상의 수에서 공통된 약수를 공약수라고 한다.

최대공약수

공약수 중 가장 큰 수를 최대공약수라고 한다.

006. 최대공약수 (파이썬)

최대공약수

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

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

유클리드 호제법

x, y의 최대공약수는 y, r(x%y)의 최대공약수와 같다.
유클리드 호제법을 이용해서 최대공약수를 구할 수 있다.

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

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

007. 최소공배수

공배수

두 개 이상의 수에서 공통된 배수를 공배수라고 한다.

최소공배수

공배수 중 가장 작은 수를 최소공배수라고 한다.
소인수분해를 이용하면 최소공배수 및 공배수를 구할 수 있다.

008. 최소공배수 (파이썬)

최소공배수

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

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

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

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 = (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 = 1

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

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

009. 진법

진법이란?

진법이란, 특정 숫자 몇 개를 사용하여 수를 표시하는 방법이다.

2진수를 8진수로 변환

뒤에서 부터 3자리씩 구분하고 빈자리는 0으로 채운다.
1010100
001 / 010 / 100
1 / 2 / 4

2진수를 16진수로 변환

뒤에서 부터 4자리씩 구분하고 빈자리는 0으로 채운다.
1010100
0101 / 0100
5 / 4

010. 진법 (파이썬)

10진수를 X진수로 변환

10진수 -> 2진수, 8진수, 16진수

#2진수 => binary : bin()
print('2진수: {}' .format(bin(dNum))
#8진수 => octal : oct()
print('8진수: {}' .format(oct(dNum))
#16진수 => Hexadecimal : hex()
print('16진수: {}' .format(hex(dNum))

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

format함수 이용하여 진수 변환2

print('2진수: {}' .format(format(dNum, '#b')))
print('8진수: {}' .format(format(dNum, '#o')))
print('16진수: {}' .format(format(dNum, '#x')))
#진법 앞에 # 없애면 숫자만(상징적 의미) 나옴

format함수 이용하여 진수 변환3

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

타입 확인하기 -> 타입은 항상 문자열로 나온다!

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

X진수를 10진수로 변환

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

0개의 댓글