0423 기초수학 4일차(~35)

박영선·2023년 4월 23일
0

약수,소수 연습문제

약수 : 나누어 떨어지는 수
소수 : 1외에 약수가 자기 자신뿐인 수
소인수 : 약수(인수)이면서 소수인 수

import random

rNum = random.randint(100,1000)
print(rNum)
#약수 구하기

for num in range(1,rNum+1):
    soinsuFlag = 0

    if rNum % num == 0:
        print(f'약수 : {num}')
        soinsuFlag += 1

#소수 구하기
    if num != 1:
        flag = True   #소수라고 전제조건 걸기
        for n in range(2,num):
            if num % n == 0:
                flag = False   #n으로 나누어 떨어진다는건 약수가 있다는것, 즉 소수가 아니라는 것
                break

        if(flag):
            print(f'소수 : {num}')
            soinsuFlag += 1

    #소인수 구하기
    if soinsuFlag >= 2:   #위 소수, 약수 조건 모두 만족하는 것들만 골라내기
        print(f'소인수 : {soinsuFlag}')

소인수와 소인수분해 연습문제

소인수분해 : 어떤 수를 소인수의 곱으로 나타내는 것

import random

rNum = random.randint(100,1000)
print(rNum)

soinsuList = []

n = 2
while n <= rNum:
    if rNum % n == 0:    #랜덤인수를 2부터 계속 나누면서 약수를 찾는 것
        print(f'소인수 : {n}')
        soinsuList.append(n)
        rNum /= n
    else:
        n+=1

print(f'soinsuList : {soinsuList}')

tempNum = 0
for s in soinsuList:  #소인수리스트 배열 내 숫자들이 s에 할당
    if tempNum != s:
        print(f'{s}\'s count : {soinsuList.count(s)}') 
        #배열 내 숫자의 갯수 구하기
        tempNum = s 
        #위에서 몇개인지 센 숫자를 또 세면 안되니까 tempNum=s를 통해 if문 피하게 해줌

최대공약수

최대공약수 : 공약수 중 가장 큰 수
서로소 : 2개 이상의 수가 서로 1 이외에 공약수가 없는 것

import random

rNum1 = random.randint(100,1000)
rNum2 = random.randint(100,1000)
print(rNum1)
print(rNum2)

maxNum=0
for n in range(1,(min(rNum1,rNum2)+1)):  
#둘 중 작은수를 사용해야 최대공약수를 구할 수 있음
    if rNum1 % n ==0 and rNum2 % n ==0:
        print(f'공약수 : {n}')
        maxNum=n

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

if maxNum == 1:
    print(f'{rNum1}과 {rNum2}는 서로소이다.')

최소공배수

두 수의 가장 작은 배수
두 수의 곱을 두 수의 최대공약수로 나누면 구할 수 있다.

import random

rNum1 = random.randint(100,1000)
rNum2 = random.randint(100,1000)
print(rNum1)
print(rNum2)

maxNum=0
for n in range(1,(min(rNum1,rNum2)+1)):  #둘 중 작은수를 사용해야 최대공약수를 구할 수 있음
    if rNum1 % n ==0 and rNum2 % n ==0:
        print(f'공약수 : {n}')
        maxNum=n

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

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

진법

10진수 / 2진수 / 8진수 /16진수 등으로 변환하기

dNum = int(input('10진수 입력: '))

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


print('2진수 (0b10101) -> 10진수 {}'.format(int('0b10101',2)))
print('8진수 (0o25) -> 10진수 {}'.format(int('0o25',8)))
print('16진수 (0x15) -> 10진수 {}'.format(int('0x15',16)))

print('2진수 (0b10101) -> 8진수 {}'.format(oct(0b10101)))
print('2진수 (0b10101) -> 16진수 {}'.format(hex(0b10101)))

print('8진수 (0o25) -> 2진수 {}'.format(bin(0o25)))
print('8진수 (0o25) -> 16진수 {}'.format(hex(0o25)))

print('16진수 (0x15) -> 2진수 {}'.format(bin(0x15)))
print('16진수 (0x15) -> 8진수 {}'.format(oct(0x15)))
profile
데이터분석 공부 시작했습니다

0개의 댓글