1.약수와 소수
약수 : 어떤수를 나누어 떨어지게 하는 수
소수 : 1과 그 수 자신만이 약수인 수(1은 제외)
약수찾기 (나머지가 0인 숫자 찾기)
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): #1은 소수에서 제외하기 때문에
flag = True
for n in range(2,number): #inputnumber 2 인 경우, for문이 실행이 안됨
if number % n ==0:
flag = False
break
if (flag):
print('{} : 소수!'.format(number))
else:
print('{} : 합성수!'.format(number))
2. 소인수와 소인수 분해
소인수 : 약수(인수) 중에서 소수인 숫자를 소인수라고 한다.
ex)20의 약수 1,2,4,5,10,20 중 소수인 2,5가 소인수
소인수분해 : 정수를 소인수의 곱으로 나타낸 것
ex)20의 소인수분해 = 2X2X5(2^2X5)
소인수찾기
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: #리스트에 n이 몇개가 있는지 반환
searchNumbers.append(n) #없으면 해당 n 을 추가
elif searchNumbers.count(n) == 1:
searchNumbers.remove(n) #n이 있으면 삭제
inputNumber /= n
else :
n +=1
print('searchNumbers : {}'.format(searchNumbers))
최대공약수
공약수 : 두개 이상의 수에서 공통된 약수
최대공약수 : 공약수 중 최댓값
num1= int(input('1보다 큰 정수 입력 : ')) #num1이 num2보다 작다는 전제
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))
세개의 수 입력, 공약수, 최대공약수 구하기
num1= int(input('1보다 큰 정수 입력 : ')) #num1이 num2보다 작다는 전제
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))
유클리드호제법 : x,y의 최대공약수는 y,x%y (r) 의 최대공약수와 같다.
num1= int(input('1보다 큰 정수 입력 : ')) #num1이 num2보다 작다는 전제
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,(temp1 +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))
miniNum = (num1 * num2) // maxNum
print('최소공배수 : {}'.format(miniNum))
두 수를 곱해서 최대공약수로 나누면 최소공배수가 나온다.
num3 = 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))
miniNum = (num1 * num2) // maxNum
print('{},{}의 최소공배수 : {}'.format(num1, num2, miniNum))
newNum = miniNum
for i in range(1,(newNum +1)):
if newNum % i ==0 and num3 % i ==0:
maxNum = i
print('최대공약수 : {}'.format(maxNum))
miniNum = (newNum * num3)//maxNum
print('{}, {}, {}의 최소공배수 : {}'.format(num1,num2,num3,miniNum))
숫자가 세개인 경우, 두개의 최대공약수, 최소공배수 먼저 뽑고 그다음에 다시 뽑은 숫자와 세번째 숫자의 최대공약수, 최소공배수 구하기
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 = i
print('최대공약수 : {}'.format(maxDay))
minDay = (newDay*ship3) // maxDay
print('{},{}, {}의 최소공배수 : {}'.format(ship1,ship2, ship3,minDay))