Python - 기초수학(문제)

sdubee10·2021년 10월 13일
0

Python

목록 보기
5/7

Q. 100부터 1000사이의 난수에 대해서 약수, 소수, 그리고 소인수를 출력하는 프로그램을 만들어보자

import random

num = random.randint(100, 1000)

print('random number : {}'.format(num))

divisor = []
primeFactorization = []
prime = []
for i in range(1, num+1):

    #약수
    if num % i == 0:
        divisor.append(i)

    #소수
    if num != 1:
        flag = True
        for j in range(2, i):
            if i % j == 0:
                flag = False
                break
        if(flag):
            prime.append(i)

#소인수 = 약수이면서 소수인거
for x in divisor:
    if x in prime:
        primeFactorization.append(x)

print("약수 : ", divisor)
print("소수 : ", prime)
print("소인수 : ", primeFactorization)

Q. 100부터 1000사이의 난수를 소인수분해를 하고 각각의 소인수에 대한 지수를 출력하는 프로그램을 만들어보자

import random
num = random.randint(100, 1000)

print('random number : {}'.format(num))

n = 2

#소인수
primeFactorization = []
while n <= num:
    if num % n == 0:
        primeFactorization.append(n)
        num /= n
    else:
        n += 1

prime = set(primeFactorization)

print("소인수 : ", primeFactorization)
for x in prime:
    count = primeFactorization.count(x)
    print(f'{x} : {count}개')

Q. 100부터 1000사이의 2개의 난수에 대해서 공약수와 최대공약수를 출력하고, 서로소인지 출력하는 프로그램을 만들어보자.

# def gcd(num1, num2):
#     while num2 > 0:
#         num1, num2 = num2, num1 % num2
#     return num1

import random

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

#공약수
commonDivisor = []
for i in range(1, min(num1, num2)+1):
    if num1 % i == 0 and num2 % i == 0:
        commonDivisor.append(i)

gcd = max(commonDivisor)

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

print(f'{num1}{num2}는 서로수이다.') if gcd == 1 else print(f'{num1}{num2}는 서로소가 아니다.')

Q. 100부터 1000사이의 2개의 난수에 대해서 최대공약수와 최소공배수를 출력하는 프로그램을 만들어보자.

import random

num1 = random.randint(100, 1000)
num2 = random.randint(100, 1000)

print(f'random num1 : {num1}\nrandom num2 : {num2}')

multi = num1 * num2

while num2 > 0:
    num1, num2 = num2, num1 % num2

print(f'최대공약수 : {num1} 최대공배수 : {int(multi/num1)}')

Q. 사용자가 입력한 수를 이용해서, 다음 내용에 따라 진법 변환하는 코드를 작성해보자.

num = int(input("10진수 입력: "))

print(f'2진수 변환 {bin(num)}')
print(f'8진수 변환 {oct(num)}')
print(f'16진수 변환 {hex(num)}')

Q. 다음 수열의 일반항을 구하고 n번째 항의 값과 합을 구하는 프로그램을 만들어보자

a1 = int(input("a1을 입력해주세요 : "))
n = int(input("n을 입력해주세요: "))
d = int(input("공차를 입력해주세요 : "))

# 공식 an = a1 + (n - 1)*d
num = 1
answer = a1
total = answer
while num < n:
    answer += d
    total += answer
    num += 1

print(answer)
print("비교: ", a1 + (n - 1)*d)

print(total)
print("비교: ", int((n * (a1 + answer))/2))

Q. 다음 수열의 일반항을 구하고 n번째 항의 값과 합을 구하는 프로그램을 만들어보자.

import math

a1 = int(input("a1을 입력해주세요 : "))
n = int(input("n을 입력해주세요: "))
r = int(input("r을 입력해주세요 : "))

num = 1

answer = a1
total = a1
while num < n:
    answer *= r
    total += answer
    num += 1

print(answer)
print(a1 * int(math.pow(r, n - 1)))

print(total)
print(int(a1 * (1 - math.pow(r, n))/ (1 - r)))

Q. 피보나치 수열에서 n항의 값과 n항까지의 합을 출력하는 프로그램을 만들어보자.

num = int(input("n 을 입력해주세요: "))

n = 1
value = 0
value1 = 0
value2 = 0
sumvalue = 0
while n <= num:
    if n == 1 or n == 2:
        value = 1
        value2 = value
        value1 = value
        sumvalue += value
    else:
        value = value2 + value1
        value2 = value1
        value1 = value
        sumvalue += value
    n += 1

print(value)
print(sumvalue)

순열

  1. 반복 가능한 객체(=길이가 n인)에 대해서 중복을 허용하지 않고 r개를 뽑아서 나열한다.

  2. 뽑힌 순서대로 나열하기 때문에 순서가 의미있다.

    (즉, 같은 값이 뽑히더라도 순서가 다르면 다른 경우의 수로 취급한다.)

  3. permutations(반복 가능한 객체, r)

조합

  1. 반복 가능한 객체(=길이가 n인)에 대해서 중복을 허용하지 않고 r개를 뽑는다.
  2. 어떤 것을 뽑는지만 중요하게 보기 때문에 뽑은 순서는 고려하지 않는다.
  3. combinations(반복 가능한 객체, r)

(Python) 순열, 조합, 중복순열, 중복조합 쉽게 구현하기

0개의 댓글