기초수학(약수와 소수, 소인수, 최대공약수, 최소공배수, 진법)

Lee JunBok·2023년 4월 18일

기초수학

목록 보기
1/5
post-thumbnail

약수와 소수

약수 : 어떤수를 나누어 떨어지게 하는 수 (나머지가 0인 수)
ex) 3/1 = 3, 3/3 = 1 # 3의 약수 : 1,3

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

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

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

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합성수'.format(number))

소인수

소인수 : 약수(인수)중에서 소수인 숫자 (소수 + 인수(약수))

소인수분해 : 1보다 큰 정수를 소인수의 곱의 형태로 나타낸 것
소인수분해를 이용해 약수를 정확하게 구할 수 있다.

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

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

    else:
        n += 1

최대공약수

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

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

# 전제조건: num1이 제일 작은 수
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(f'공약수 : {i}')
        maxNum = i

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

유클리드 호제법 : x, y의 최대공약수는 y, r(x%y : 나머지)의 최대공약수와 같다.

최소공배수

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

최소공배수 : 공통된 배수 중에 가장 작은 수
최소공배수 = (숫자1 * 숫자2) // 최대공약수

# num1 < num2 전제조건
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(f'공약수 : {i}')
        maxNum = i

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

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

진법

특정 숫자 몇개를 사용하여 수를 표시하는 방법
2진법 : 0, 1
8진법 : 0, 1, 2, 3, 4, 5, 6, 7
10진법 : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
16진법 : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F(영문은 소문자도 가능)

2진수: binary bin(), 8진수: octal oct(), 16진수: Hexadecimal hex()

num = 30

print('2진수 : {}'.format(bin(num))) # 타입은 항상 문자열 str
print('8진수 : {}'.format(oct(num)))
print('16진수 : {}'.format(hex(num)))

print('2진수 : {}'.format(format(num, '#b'))) # 타입은 항상 문자열 str 
print('8진수 : {}'.format(format(num, '#o'))) (#생략가능)
print('16진수 : {}'.format(format(num, '#x')))

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

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

이글은 제로베이스 데이터 취업스쿨의 강의자료 일부를 발췌하여 작성되었습니다.

profile
Learning Data Analyst

0개의 댓글