약수,소수 연습문제
약수 : 나누어 떨어지는 수
소수 : 1외에 약수가 자기 자신뿐인 수
소인수 : 약수(인수)이면서 소수인 수
import random
rNum = random.randint(100,1000)
print(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 #n으로 나누어 떨어진다는건 약수가 있다는것, 즉 소수가 아니라는 것
break
if(flag):
print(f'소수 : {num}')
soinsuFlag += 1
#소인수 구하기
if soinsuFlag >= 2: #위 소수, 약수 조건 모두 만족하는 것들만 골라내기
print(f'소인수 : {soinsuFlag}')
소인수와 소인수분해 연습문제
소인수분해 : 어떤 수를 소인수의 곱으로 나타내는 것
import random
rNum = random.randint(100,1000)
print(rNum)
soinsuList = []
n = 2
while n <= rNum:
if rNum % n == 0: #랜덤인수를 2부터 계속 나누면서 약수를 찾는 것
print(f'소인수 : {n}')
soinsuList.append(n)
rNum /= n
else:
n+=1
print(f'soinsuList : {soinsuList}')
tempNum = 0
for s in soinsuList: #소인수리스트 배열 내 숫자들이 s에 할당
if tempNum != s:
print(f'{s}\'s count : {soinsuList.count(s)}')
#배열 내 숫자의 갯수 구하기
tempNum = s
#위에서 몇개인지 센 숫자를 또 세면 안되니까 tempNum=s를 통해 if문 피하게 해줌
최대공약수
최대공약수 : 공약수 중 가장 큰 수
서로소 : 2개 이상의 수가 서로 1 이외에 공약수가 없는 것
import random
rNum1 = random.randint(100,1000)
rNum2 = random.randint(100,1000)
print(rNum1)
print(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}는 서로소이다.')
최소공배수
두 수의 가장 작은 배수
두 수의 곱을 두 수의 최대공약수로 나누면 구할 수 있다.
import random
rNum1 = random.randint(100,1000)
rNum2 = random.randint(100,1000)
print(rNum1)
print(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}')
minNum = (rNum1*rNum2)//maxNum
print(f'최소공배수 : {minNum}')
진법
10진수 / 2진수 / 8진수 /16진수 등으로 변환하기
dNum = int(input('10진수 입력: '))
print('2진수:{}'.format(bin(dNum)))
print('8진수:{}'.format(oct(dNum)))
print('16진수:{}'.format(hex(dNum)))
print('2진수 (0b10101) -> 10진수 {}'.format(int('0b10101',2)))
print('8진수 (0o25) -> 10진수 {}'.format(int('0o25',8)))
print('16진수 (0x15) -> 10진수 {}'.format(int('0x15',16)))
print('2진수 (0b10101) -> 8진수 {}'.format(oct(0b10101)))
print('2진수 (0b10101) -> 16진수 {}'.format(hex(0b10101)))
print('8진수 (0o25) -> 2진수 {}'.format(bin(0o25)))
print('8진수 (0o25) -> 16진수 {}'.format(hex(0o25)))
print('16진수 (0x15) -> 2진수 {}'.format(bin(0x15)))
print('16진수 (0x15) -> 8진수 {}'.format(oct(0x15)))