어떤 수를 나누어 떨어지게 하는 수
1과 자신만을 약수로 가지는 수 (단, 1은 제외)
ex) 2, 3, 5, 7, 11, 13, 17, 19 등
파이썬을 이용해서 사용자가 입력한 숫자의 약수 출력
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))
약수(인수) 중에서 소수인 숫자를 소인수라고 한다.
1보다 큰 정수를 소인수의 곱으로 나타낸 것을 소인수분해라고 한다.
파이썬을 이용해서 사용자가 입력한 수를 소인수분해
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))
두 개 이상의 수에서 공통된 약수를 공약수라고 한다.
공약수 중 가장 큰 수를 최대공약수라고 한다.
두 개의 수를 입력하면 공약수와 최대공약수를 출력하는 코드 작성
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))
두 개 이상의 수에서 공통된 배수를 공배수라고 한다.
공배수 중 가장 작은 수를 최소공배수라고 한다.
소인수분해를 이용하면 최소공배수 및 공배수를 구할 수 있다.
두 개의 수를 입력하면 공배수와 최소공배수를 출력하는 코드 작성
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))
진법이란, 특정 숫자 몇 개를 사용하여 수를 표시하는 방법이다.
뒤에서 부터 3자리씩 구분하고 빈자리는 0으로 채운다.
1010100
001 / 010 / 100
1 / 2 / 4
뒤에서 부터 4자리씩 구분하고 빈자리는 0으로 채운다.
1010100
0101 / 0100
5 / 4
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진수
print('2진수(0b11110) -> 10진수({})' .format(int('0b11110', 2)))
print('8진수(0o36) -> 10진수({})' .format(int('0o36', 8)))
print('16진수(0x1e) -> 10진수({})' .format(int('0x1e', 16)))