📌 파이썬 연습문제 [공약수_공배수]
📋 약수 & 소수 & 소인수
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)}')
print(f'8진법 : {oct(50)}')
print(f'16진법 : {hex(50)}')
print('-'*30)
print('2진법으로 변화')
print(f'50 : {bin(50)}')
print(f'0o62 : {bin(0o62)}')
print(f'0x32 : {bin(0x32)}')
print('-'*30)
print('8진법으로 변화')
print(f'50 : {oct(50)}')
print(f'0b110010 : {oct(0b110010)}')
print(f'0x32 : {oct(0x32)}')
print('-'*30)
print('16진법으로 변화')
print(f'50 : {hex(50)}')
print(f'0b110010 : {hex(0b110010)}')
print(f'0o62 : {hex(0o62)}')
print('-'*30)
print('10진법으로 변화')
print(f'0b110010 : {int(0b110010)}')
print(f'0o62 : {int(0o62)}')
print(f'0x32 : {int(0x32)}')
📋 등차수열
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)
📋 시그마
def sigma(a1):
sequences = []
for i in range(30):
sequences.append(a1)
a1 = a1 * 2
return sequences
print(sigma(2))
📋계차 수열
def differentSequence(a1, a2, n, d):
valN = a2 + ((n - 1) - 1) * d
sum = (a2 + valN) * (n - 1) // 2
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))
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))
result = combination(7, 3)
print(f'{round(1 / result * 100, 2)}%')
📋확률
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)}%')