[제로베이스 데이터 취업스쿨] 23.06.17~18 스터디 노트

김준호·2023년 6월 19일
0
post-thumbnail

기초수학 문제풀이1

문제1. 약수와 소수

소인수를 따로 변수선언해서 약수,소수 2개이상이 되면 출력한다.

import random

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

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

    soinsu = 0

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

    if num != 1:
        flag = True
        for n in range(2,num):
            if num % n ==0:
                flag = False
                break
        if flag:
            print(f'소수 : {num}')
            soinsu+=1

    if soinsu >=2:
       print(f'소인수 : {soinsu}')
난수 : 156
약수 : 1
약수 : 2
소수 : 2
소인수 : 2
약수 : 3
소수 : 3
소인수 : 2
.
.
.
소수 : 149
소수 : 151
약수 : 156

문제2. 소인수분해

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

soinsuList = []
n = 2
while n <= rNum:
    if rNum % n == 0:
        print(f'소인수 : {n}')
        soinsuList.append(n)
        rNum /= n

    else:
        n+=1

print(f'soinsuList = {soinsuList}')

#소인수 지수 표현
tempNum = 0
for s in soinsuList:
    if tempNum != s:
        print(f'{s} count: {soinsuList.count(s)}')
        tempNum = s
난수 : 846
소인수 : 2
소인수 : 3
소인수 : 3
소인수 : 47
soinsuList = [2, 3, 3, 47]
2 count: 1
3 count: 2
47 count: 1

문제3. 최대공약수와 서로소

min(x,y)함수는 인수 중 가장 작은 수를 알려준다.

import random
rNum1 = random.randint(100,1000)
rNum2 = random.randint(100,1000)
print(f'rNum1 : {rNum1}, rNum2 : {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}는 서로소 ')
rNum1 : 496, rNum2 : 784
공약수 : 1
공약수 : 2
공약수 : 4
공약수 : 8
공약수 : 16
최대공약수 : 16
rNum1 : 380, rNum2 : 951
공약수 : 1
최대공약수 : 1
380과 951는 서로소 

문제4. 최소공배수

import random
rNum1 = random.randint(100,1000)
rNum2 = random.randint(100,1000)
print(f'rNum1 : {rNum1}, rNum2 : {rNum2}')
maxNum = 0
minNum = 0

for n in range(1, min(rNum1,rNum2)+1):
    if rNum1 % n == 0 and rNum2 % n == 0:
        maxNum = n
print(f'최대공약수 : {maxNum}')

minNum = (rNum1 * rNum2) // maxNum
print(f'최소공배수 : {int(minNum)}')
rNum1 : 475, rNum2 : 646
최대공약수 : 19
최소공배수 : 16150

문제5. 진법

inputNum = int(input('숫자 입력: '))

#10진수 -> x진수
print(f'10진수 : {inputNum} --> 2진수 : {bin(inputNum)} ')
print(f'10진수 : {inputNum} --> 8진수 : {oct(inputNum)} ')
print(f'10진수 : {inputNum} --> 16진수 : {hex(inputNum)} ')
print()

#x진수 -> 10진수
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()

#x진수 -> y진수
print('2진수(0b10101) --> 8진수({})'.format(oct(0b10101)))
print('2진수(0b10101) --> 16진수({})'.format(hex(0b10101)))
print('2진수(0b10101) --> 10진수({})'.format(int(0b10101)))
숫자 입력: 10
10진수 : 10 --> 2진수 : 0b1010 
10진수 : 10 --> 8진수 : 0o12 
10진수 : 10 --> 16진수 : 0xa 

2진수(0b10101) --> 10진수(21)
8진수(0o135) --> 10진수(93)
16진수(0x5f) --> 10진수(95)

2진수(0b10101) --> 8진수(0o25)
2진수(0b10101) --> 16진수(0x15)
2진수(0b10101) --> 10진수(21)

문제6. 등차수열

inputN1 = int(input('초항 : '))
inputD = int(input('공차 : '))
inputN = int(input('n항 : '))
valueN = 0
sumN = 0
n = 1
while n <= inputN:
    if n == 1:
        valueN = inputN1
        sumN += valueN
        print(f'{n}번째 항의 값 : {valueN}')
        print(f'{n}번째 항까지의 합 : {sumN}')
        n += 1
        continue

    valueN += inputD
    sumN += valueN
    print(f'{n}번째 항의 값 : {valueN}')
    print(f'{n}번째 항까지의 합 : {sumN}')
    n +=1

print(f'{inputN}번째 항의 값 : {valueN}')
print(f'{inputN}번째 항까지의 합 : {sumN}')
초항 : 4
공차 : 6
n항 : 5
1번째 항의 값 : 4
1번째 항까지의 합 : 4
2번째 항의 값 : 10
2번째 항까지의 합 : 14
3번째 항의 값 : 16
3번째 항까지의 합 : 30
4번째 항의 값 : 22
4번째 항까지의 합 : 52
5번째 항의 값 : 28
5번째 항까지의 합 : 80
5번째 항의 값 : 28
5번째 항까지의 합 : 80

문제7. 등비수열

inputN1 = int(input('초항 : '))
inputD = int(input('공비 : '))
inputN = int(input('n항 : '))
valueN = 0
sumN = 0
n = 1
while n <= inputN:
    if n == 1:
        valueN = inputN1
        sumN += valueN
        print(f'{n}번째 항의 값 : {valueN}')
        print(f'{n}번째 항까지의 합 : {sumN}')
        n += 1
        continue

    valueN *= inputD
    sumN += valueN
    print(f'{n}번째 항의 값 : {valueN}')
    print(f'{n}번째 항까지의 합 : {sumN}')
    n +=1

print(f'{inputN}번째 항의 값 : {valueN}')
print(f'{inputN}번째 항까지의 합 : {sumN}')
초항 : 2
공차 : 3
n항 : 5
1번째 항의 값 : 2
1번째 항까지의 합 : 2
2번째 항의 값 : 6
2번째 항까지의 합 : 8
3번째 항의 값 : 18
3번째 항까지의 합 : 26
4번째 항의 값 : 54
4번째 항까지의 합 : 80
5번째 항의 값 : 162
5번째 항까지의 합 : 242
5번째 항의 값 : 162
5번째 항까지의 합 : 242
profile
취업공부

0개의 댓글