[Python][기초수학] 연습 문제

·2023년 3월 17일
0

[Python] 연습 문제

목록 보기
8/12
post-thumbnail

📌 파이썬 연습문제 [공약수_공배수]

📋 약수 & 소수 & 소인수
# 약수
import random


def divisor(n):
   divisors = []
   for i in range(1, n + 1):
       if n % i == 0:
           divisors.append(i)

   return divisors


# 소수
def prime(n):
   isPrime = True
   for i in range(2, n):
       if n % i == 0:
           isPrime = False

   return isPrime




# 소인수
def divisorPrime(n):
   primes = []
   for i in range(1, n + 1):
       isPrime = True
       if n % i == 0:
           for j in range(2, i):
               if i % j == 0:
                   isPrime = False

           if isPrime:
               primes.append(i)

   return primes


n = random.randint(100, 1000)
print(f'{n}의 약수 : {divisor(n)}')
print(f'{n}이 소수 : {prime(n)}')
print(f'{n}의 소인수 : {divisorPrime(n)}')
📋 소인수분해
import random


# 소수
def prime(n):
   isPrime = True
   for i in range(2, n):
       if n % i == 0:
           isPrime = False

   return isPrime


def Factorization(n):
   div = 2
   val = n
   primes = []

   while val >= div:
       if val % div == 0:
           val = val / div
           primes.append(div)
       else:
           div += 1

   print(f'{n} 소인수분해 결과 : {primes}')

   prime = 0
   for i in primes:
       if i != prime:
           print(f'{i}의 지수 : {primes.count(i)}')
           prime = i


n = random.randint(100, 1000)
Factorization(n)
📋 최대공약수
# 최대공약수
import random


def euclidean(n1, n2):
   temp1 = n1
   temp2 = n2

   while temp2 > 0:
       temp = temp2
       temp2 = temp1 % temp
       temp1 = temp

   print(f'{n1}, {n2}의 최대 공약수 : {temp1}')
   if temp1 == 1:
       print('서로소 입니다.')
   else:
       print('서로소가 아닙니다.')


n1 = random.randint(100, 1000)
n2 = random.randint(100, 1000)

euclidean(n1, n2)
📋 최소공배수
# 최소공배수
import random


def minMultiple(n1, n2):
   i = max(n1, n2)
   while True:
       if i % n1 == 0 and i % n2 == 0:
           break
       i += 1
   print(f'{n1}, {n2}의 최소공배수 : {i}')


def euclidean(n1, n2):
   temp1 = n1
   temp2 = n2

   while temp2 > 0:
       temp = temp2
       temp2 = temp1 % temp
       temp1 = temp

   return temp1


n1 = random.randint(100, 1000)
n2 = random.randint(100, 1000)

minMultiple(n1, n2)
print(f'최소공배수 공식 : {n1 * n2 //  euclidean(n1, n2)}')

📌 파이썬 연습문제 [진법_수열]

📋 진법
# 진법

print(f'2진법 : {bin(50)}') #0b110010
print(f'8진법 : {oct(50)}') #0o62
print(f'16진법 : {hex(50)}') #0x32
print('-'*30)
#2진법으로 변환
print('2진법으로 변화')
print(f'50 : {bin(50)}')
print(f'0o62 : {bin(0o62)}')
print(f'0x32 : {bin(0x32)}')
print('-'*30)

#8진법으로 변환
print('8진법으로 변화')
print(f'50 : {oct(50)}')
print(f'0b110010 : {oct(0b110010)}')
print(f'0x32 : {oct(0x32)}')
print('-'*30)

#16진법으로 변환
print('16진법으로 변화')
print(f'50 : {hex(50)}')
print(f'0b110010 : {hex(0b110010)}')
print(f'0o62 : {hex(0o62)}')
print('-'*30)

#10진법으로 변환
print('10진법으로 변화')
print(f'0b110010 : {int(0b110010)}')
print(f'0o62 : {int(0o62)}')
print(f'0x32 : {int(0x32)}')
📋 등차수열
# 등차수열
# {4, 10, 16, 22, 28, 34, 40 . . . }

def arithSequence(a1, n, d):
   valN = (n - 1) * d + a1
   sum = n * (a1 + valN) // 2

   print(f'{n}번째 값 : {valN}')
   print(f'{n}번째 까지의 합 : {sum}')


a1 = int(input('첫번째 항 : '))
n = int(input('N : '))
d = int(input('공차 : '))

arithSequence(a1, n, d)
📋 시그마
# 시그마
# {2, 4, 8, 16, 32, 64 ...)
# 30일째의 값
def sigma(a1):
   sequences = []
   for i in range(30):
       sequences.append(a1)
       a1 = a1 * 2

   return sequences


print(sigma(2))
📋계차 수열
# 계차 수열
# S1 {2, 5, 11, 20, 32, 47, 65, 86, 110 ...}
# S2 { 3, 6, 9, 12, 15, 18, 21, 24  ... }
#     {  3,  3,  3,  3,  3,  3,  3  ...}

def differentSequence(a1, a2, n, d):
   valN = a2 + ((n - 1) - 1) * d  # 두번째 수열의 N-1 번째 값
   sum = (a2 + valN) * (n - 1) // 2  # 두번째 수열 N번째 까지의 합
   # 첫 번째 수열의 N번째 값 = 첫 번째 항 + 두번째 수열의 n-1 번째 값까지 합
   # print(f'두번째 수열의 {n}번째 값 : {valN}')
   # print(f'두번째 수열의 {n}번째 까지의 값 : {sum}')
   return a1 + sum


a1 = int(input('계차 수열의 첫번째 항의 값 : '))
a2 = int(input('두번째 수열의 첫번째 항의 값 : '))
n = int(input('구할 항 순서 : '))
d = int(input('공차 : '))
print(differentSequence(a1, a2, n, d))
📋 피보나치 수열
# 피보나치

def fibonacci(n):
   temp1 = 1
   temp2 = 1
   sum = 2

   for i in range(3, n + 1):
       temp = temp1 + temp2
       sum += temp
       temp1 = temp2
       temp2 = temp

   print(f'{n}항의 값 : {temp2}')
   print(f'{n}항 까지의 합 : {sum}')


n = int(input('n : '))
fibonacci(n)
📋팩토리얼
# 팩토리얼

# 반복문 이용
def factorial1(n):
   val = 1
   for i in range(1, n + 1):
       val *= i

   print(f'{n}! : {val}')


# 재귀함수 이용
def factorial2(n):
   if n == 1:
       return 1
   else:
       return n * factorial2(n - 1)


n = int(input('n : '))

print('반복문 이용 ')
factorial1(n)
print('재귀함수 이용 ')
print(f'{n}! : {factorial2(n)}')
📋 군수열
# 군 수열
'''
{1/1, 1/2, 2/1, 1/3, 2/2, 3/1, 1/4, 2/3, 3/2, 4/1, 1/5, 2/4 . . . }
{ (1/1),   (1/2, 2/1) , (1/3, 2/2, 3/1) ,  (1/4, 2/3, 3/2, 4/1) , (1/5, 2/4 . . . }
{ 1 | 1, 2 | 1, 2, 3 | 1, 2, 3, 4 | 1, 2, 3, 4, 5, ... }
{ 1 | 2, 1 | 3, 2 ,1 | 4, 3, 2, 1 | 5, 4, 3, 2, 1, ... }
'''


def sequence():
   sum = 0
   i = 1
   result = 0
   while sum <= 100:
       for j in range(i):
           val1 = j + 1
           val2 = i - j
           result = round(val1 / val2, 2)
           sum += result
           print(f'{val1} / {val2}, ', end='')
       print()
       i += 1

   print()
   print(f'합이 100을 초과하는 항의 순서 : {i - 1}')
   print(f'{i - 1}항의 값 : {result}')


sequence()

📌 파이썬 연습문제 [순열_조합_확률]

📋순열
# 순열
def permutation(n, r):
   result = 1
   for i in range(n, n - r, -1):
       result *= i
       print(f'n : {i}')

   print(f'result = {result}')

   return result


n = int(input('n : '))
r = int(input('r : '))
print(permutation(n, r))


# 카드 7장을 일렬로 나열하되 2, 4, 7번 카드가 서로 이웃하도록 나열하는 모든 경우의 수
def cardPerm(n, r):
   n1 = permutation(n - r + 1, n - r + 1)
   n2 = permutation(r, r)
   result = n1 * n2
   print(f'카드의 경우의 수 : {result}')


n = int(input('모든 카드 개수 : '))
r = int(input('이웃하는 카드 개수 : '))
cardPerm(n, r)

📋조합
# 조합
def combination(n, r):
   val1 = 1
   val2 = 1
   for i in range(n, n - r, -1):
       val1 *= i
       val2 *= i - (n - r)
       print(f'va1 : {i}')
       print(f'va2 : {i - (n - r)}')

   return val1 // val2


n = int(input('n : '))
r = int(input('r : '))
print(combination(n, r))

# 카드 7장 중 3장을 선택했을 때 3,4,5가 동시에 선택될 수 있는 확률

result = combination(7, 3)
print(f'{round(1 / result * 100, 2)}%')
📋확률
# 확률
# 박스에 꽝 6장, 선물 4장이 있을 때 꽝 3장, 선물 3장을 뽑는 확률
def combination(n, r):
   val1 = 1
   val2 = 1
   for i in range(n, n - r, -1):
       val1 *= i
       val2 *= i - (n - r)

   return val1 // val2


event1 = combination(6, 3)
event2 = combination(4, 3)
sample = combination(10, 6)
result = (event1 * event2 / sample) * 100
print(f'event1 : {event1}')
print(f'event2 : {event2}')
print(f'sample : {sample}')
print(f'result : {round(result, 2)}%')
profile
개발하고싶은사람

0개의 댓글