해당 글은 제로베이스데이터스쿨 학습자료를 참고하여 작성되었습니다

📌약수

  • 해당 수를 나누었을 때 나머지가 0인 수
    ex) 8의 약수 : 1, 2, 4, 8

📝입력

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

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

🧾출력

0보다 큰 정수 입력: 10
10의 약수: 1
10의 약수: 2
10의 약수: 5
10의 약수: 10

📌소수

  • 1과 자신만을 약수로 갖는 수(단, 1을 제외)
    ex) 15이하의 소수 : 2, 3, 5, 7, 11, 13

📝입력

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

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

    if flag:
        print(f'{num} : 소수')
    else:
        print(f'{num} : \t 합성수')

🧾출력

0보다 큰 정수 입력: 10
2 : 소수
3 : 소수
4 : 	 합성수
5 : 소수
6 : 	 합성수
7 : 소수
8 : 	 합성수
9 : 	 합성수
10 : 	 합성수

📌소인수와 소인수분해

  • 소인수 : 약수 중에서 소수인 숫자
    ex) 12의 소인수 : 2, 3
    (출처:제로베이스데이터스쿨)
  • 소인수분해 : 1보다 큰 정수를 소인수의 곱으로 표현한 것
    ex) 20의 소인수 분해 : 20 = 2^2 * 5
  • 소인수분해를 통해서 약수를 쉽게 구할 수 있음
    (출처:제로베이스데이터스쿨)

📝입력

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

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

🧾출력

1보다 큰 정수 입력 : 20
소인수: 2
소인수: 2
소인수: 5

📌공약수와 최대공약수

  • 두개 이상의 수에서 공통된 약수
    (출처:제로베이스데이터스쿨)

📝입력

n1 = int(input('1보다 큰 정수 입력: '))
n2 = int(input('1보다 큰 정수 입력: '))
maxNum = 0

for i in range(1, min(n1, n2) + 1):
    if n1 % i == 0 and n2 % i == 0:
        print(f'공약수: {i}')
        maxNum = i

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

import math
print('모듈사용')
print(f'math.gcd({n1}, {n2}) : {math.gcd(n1, n2)}')

🧾출력

1보다 큰 정수 입력: 12
1보다 큰 정수 입력: 36
공약수: 1
공약수: 2
공약수: 3
공약수: 4
공약수: 6
공약수: 12
최대공약수: 12

모듈사용
math.gcd(12, 36) : 12

📌유클리드 호제법

(출처:제로베이스데이터스쿨)

📝입력

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

x = n1; y = n2

while y > 0:
    temp = y
    y = x % y
    x = temp

print('{}, {}의 최대공약수: {}'.format(n1, n2, x))

for n in range(1, x + 1):
    if x % n == 0:
        print('{}, {}의 공약수: {}'.format(n1, n2, n))

🧾출력

1보다 큰 정수 입력: 12
1보다 큰 정수 입력: 36
12, 36의 최대공약수: 12
12, 36의 공약수: 1
12, 36의 공약수: 2
12, 36의 공약수: 3
12, 36의 공약수: 4
12, 36의 공약수: 6
12, 36의 공약수: 12

📌공배수와 최소공배수

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

    (출처:제로베이스데이터스쿨)

📝입력

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(f'최대공약수: {maxNum}')

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

🧾출력

1보다 큰 정수 입력: 15
1보다 큰 정수 입력: 33
공약수: 1
공약수: 3
최대공약수: 3
최소공배수: 165

최대공약수와 최소공배수만 구한다면 함수를 활용하면 된다
단, 파이썬의 버전이 낮으면 작동하지 않을 수 있다
math.gcd() = 최대공약수
math.lcm() = 최소공배수
📝입력

import math
fruit = 10
fish = 24
vegetable = 30

print(f'최대공약수: {math.gcd(fruit, fish, vegetable)}')
print(f'최소공배수: {math.lcm(fruit, fish, vegetable)}')

🧾출력

최대공약수: 2
최소공배수: 120

📌진법

  • 특정 숫자 몇 개를 사용하여 수를 표시하는 방법
    (출처:제로베이스데이터스쿨)

10진수 -> X진수

📝입력

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

🧾출력

2진수: 0b11110
8진수: 0o36
16진수: 0x1e

📝입력

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

🧾출력

2진수: 0b11110
8진수: 0o36
16진수: 0x1e

0b11110, 0o36, 0x1e

진수 표기 없이 변환

📝입력

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

🧾출력

2진수: 11110
8진수: 36
16진수: 1e

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

🧾출력

2진수(0b11110): 10진수(30)
8진수(0o36): 10진수(30)
16진수(0x1e): 10진수(30)

0개의 댓글