기초수학 문제

Lee JunBok·2023년 4월 27일

기초수학

목록 보기
5/5
post-thumbnail

01

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:
        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:
        print(f'[소인수] : {num}')

02

100부터 1000사이의 난수를 소인수분해를 하고 각각의 소인수에 대한 지수를 출력하기

import random

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

soinsuList = []

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

        # rNum = rNum / n
        rNum /= n

    else:
        n += 1

print(f'soinsuList: {soinsuList}')

tempNum = 0
for s in soinsuList:
    if tempNum != s:
        print(f'{s}\'s count: {soinsuList.count(s)}')
        tempNum = s

03

100부터 1000사이의 2개의 난수에 대해서 공약수와 최대공약수를 출력하고, 서로소인지 출력하기

import random

num1 = random.randint(100,1000)
num2 = random.randint(100,1000)
print(f'num: {num1}, {num2}')

maxNum = 0

for n in range(1, (min(num1,num2)+1)):
    if num1 % n == 0 and num2 % n == 0:
        print(f'공약수: {n}')

        maxNum = n

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

if maxNum == 1:
    print(f'{num1}{num2}는 서로소 이다.')

04

00부터 1000사이의 2개의 난수에 대해서 최대공약수와 최소공배수를 출력하기

import random

num1 = random.randint(100,1000)
num2 = random.randint(100,1000)
print(f'num: {num1}, {num2}')

maxNum = 0

for n in range(1, (min(num1,num2)+1)):
    if num1 % n == 0 and num2 % n == 0:
        print(f'공약수: {n}')

        maxNum = n

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

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

    

05

진법 변환하는 코드 작성하기

num = int(input('숫자를 입력하세요 : '))

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

print('2진수(0b101110) -> 10진수({})'.format(int('0b101110',2)))    
print('8진수(0o135) -> 10진수({})'.format(int('0o135',8)))    
print('16진수(0x6c) -> 10진수({})'.format(int('0x6c',16)))    


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

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

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

06

등차수열

inputA1 = int(input('a1 입력 : '))
inputD = int(input('공차 입력 : '))
inputN = int(input('n 입력 : '))

valueN = 0; sumN = 0

n = 1
while n <= inputN:

    if n == 1:
        valueN = inputA1
        sumN += valueN
        print('{}번째 항의 값: {}'.format(n, valueN))
        print('{}번째 항까지의 값: {}'.format(n, sumN))
        n += 1
        continue

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

print('{}번째 항의 값: {}'.format(inputN, valueN))
print('{}번째 항까지의 값: {}'.format(inputN, sumN))

07

등비수열

inputA1 = int(input('a1 입력 : '))
inputR = int(input('공비 입력 : '))
inputN = int(input('n 입력 : '))

valueN = 0; sumN = 0

n = 1
while n <= inputN:

    if n == 1:
        valueN = inputA1
        sumN += valueN
        print('{}번째 항의 값: {}'.format(n, valueN))
        print('{}번째 항까지의 값: {}'.format(n, sumN))
        n += 1
        continue

    valueN *= inputR
    sumN += valueN
    print('{}번째 항의 값: {}'.format(n, valueN))
    print('{}번째 항까지의 값: {}'.format(n, sumN))
    n += 1

print('{}번째 항의 값: {}'.format(inputN, valueN))
print('{}번째 항까지의 값: {}'.format(inputN, sumN))

08

피보나치 수열

inputN = int(input('n 입력 : '))

valueN = 0; sumN = 0

valuePrev2 = 0
valuePrev1 = 0

n = 1
while n <= inputN:
    if n == 1 or n == 2:
        valueN = 1
        valuePrev2 = valueN
        valuePrev1 = valueN
        sumN += valueN
        n += 1

    else:
        valueN = valuePrev2 + valuePrev1
        valuePrev2 = valuePrev1
        valuePrev1 = valueN
        sumN += valueN
        n += 1

print('{}번째 항의 값: {}'.format(inputN, valueN))
print('{}번째 항까지의 값: {}'.format(inputN, sumN))

09

팩토리얼

def facFun(n):

    fac = 1
    for n in range(1,(n+1)):
        fac *= n

    return fac


def facFun2(n):

    if n == 1:
        return n
    
    return n * facFun2(n-1)

inputN = int(input('n 입력 : '))
print(f'{inputN}!: {facFun2(inputN)}')


import math

print(math.factorial(10))

10

군수열

flag = True
n = 1
nCnt = 1; searchNC = 0; searchNP = 0
sumN = 0

while flag:

    for i in range(1, (n+1)):
        print('{}/{} '.format(i, (n - i + 1)), end='')

        sumN += i / (n - i + 1)
        nCnt += 1

        if sumN > 100:
            searchNC = i
            searchNP = n - i + 1
            flag = False
            break
    print()
    n += 1
    
print('100초과하는 항, 값, 합: {}항 , {}/{}, {}'.format(nCnt, searchNC, searchNP, sumN))

11

순열

numN = int(input('numN 입력 : '))
numR = int(input('numR 입력 : '))
result = 1

for n in range(numN, (numN - numR), -1):
    print('n : {}'.format(n))
    result = result * n

print(result)

조합

numN = int(input('numN 입력 : '))
numR = int(input('numR 입력 : '))

resultP = 1
resultR = 1
resultC = 1

for n in range(numN, (numN - numR), -1):
    resultP *= n

print(f'resultP : {resultP}')

for n in range(numR, 0 , -1):
    resultR = resultR * n

print(f'resultR : {resultR}')

resultC = int(resultP / resultR)

print(f'resultC : {resultC}')

이글은 제로베이스 데이터 취업스쿨의 강의자료 일부를 발췌하여 작성되었습니다.

profile
Learning Data Analyst

0개의 댓글