스터디노트_기초수학_연습문제_1

MR.HAN·2023년 10월 19일

스터디노트

목록 보기
5/9

ex. 100부터 1000 사이의 난수에 대해서 약수, 소수, 그리고 소인수를 출력하는 프로그램

import random

rNum = random.randint(100,1000)
print(f'rNum : {rNum}')

for num in range(1,rNum + 1):

    soinsuFlag = 0 # 초기화

    # 약수
    if rNum % num == 0: # 나누어 떨어지는 수
        print(f'[약수] : {num}')
        soinsuFlag += 1

    # 소수
    if num != 1: # 1외에 약수가 ~
        flag = True # 소수라고 가정
        for n in range(2, num):
            if num % n == 0: # ~ 자기 자신뿐인 수
                flag = False
                break

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

    # 소인수
    if soinsuFlag >= 2: # 다음 바퀴때 0으로 초기화
        print(f'[소인수] : {num}')



ex. 100부터 1000사이의 난수를 소인수분해를 하고 각각의 소인수에 대한 지수를 출력하는 프로그램

import random

rNum = random.randint(100, 1000)
print(f'rNum : {rNum}')

# 소인수 List 출력
soinsuList = []

n = 2
while n <= rNum:
    if rNum % n == 0:
        print(f'소인수 : {n}')
        soinsuList.append(n)    # 리스트에 n 추가
        rNum /= n               # rNum을 n으로 나누고 다시 rNum으로 할당

    else:
        n += 1

print(f'soinsuList : {soinsuList}')

tempNum = 0
for s in soinsuList:            # soinsuList 안에서 순차적으로 반복
    if tempNum != s:
        print(f'{s}\'s count : {soinsuList.count(s)}')
        tempNum = s



ex. 100부터 1000사이의 2개의 난수에 대해서 공약수와 최대공약수를 출력하고,
서로소(1외에 공약수가 없는 두 수)인지 출력하는 프로그램

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

print(f'rNum1 : {rNum1}')
print(f'rNum2 : {rNum2}')

for n in range(1, (min(rNum1, rNum2) + 1)): # min() 작은 수 반환
    if rNum1 % n == 0 and rNum2 % n == 0:
        print(f'공약수 : {n}')
        maxNum = n # 반복문 끝에는 가장 큰 공약수가 변수에 할당

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

if maxNum == 1: # 1외에는 서로 공통된 약수가 없다.
    print(f'{rNum1}{rNum2}는 서로소이다.')



ex. 100부터 1000사이의 2개의 난수에 대해서 최대공약수와 최소공배수를 출력하는 프로그램

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

print(f'rNum1 : {rNum1}')
print(f'rNum2 : {rNum2}')

maxNum = 0

for n in range(1, (min(rNum1, rNum2) + 1)): # min() 작은 수 반환
    if rNum1 % n == 0 and rNum2 % n == 0:
        print(f'공약수 : {n}')
        maxNum = n # 반복문 끝에는 가장 큰 공약수가 변수에 할당

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

minNum = (rNum1 * rNum2) // maxNum # 최소공배수는 두 수를 곱한 값을 최대공약수로 나눈 값의 몫
print(f'최소공배수 : {minNum}')



ex. 사용자가 입력한 수를 이용해서, 진법 변환하는 코드

코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진수(0o135) -> 10진수({})'.format(int('0o135', 8)))
print('16진수(0x5f) -> 10진수({})'.format(int('0x5f', 16)))

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

0개의 댓글