0420 기초수학 1일차(~08)

박영선·2023년 4월 20일
0

1.약수와 소수

약수 : 어떤수를 나누어 떨어지게 하는 수
소수 : 1과 그 수 자신만이 약수인 수(1은 제외)

  • 1~30까지 숫자 중 5로 나눈 몫과 나머지가 모두 소수인 숫자들은?
    12,13,17,18,27,28 (ex.12를 5로 나누면 몫2, 나머지2)
  • 1~30까지 숫자 중 소수인 숫자들은?
    2,3,5,7,11,13,17,19,23,29

약수찾기 (나머지가 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))
profile
데이터분석 공부 시작했습니다

0개의 댓글