오늘부터 기초수학 수업을 들었다.
어떤 수를 나누어 떨어지게 하는 수
inputNum = int(input('숫자 입력: '))
for i in range(1,inputNum):
if inputNum % i == 0:
print(f'{i}는 {inputNum}의 약수')
숫자 입력: 10
1는 10의 약수
2는 10의 약수
5는 10의 약수
1과 자신만을 약수로 가지는 수 (단,1은 제외)
inputNum = int(input('숫자 입력: '))
for i in range(1,inputNum+1):
flag = True
for n in range(2,i):
if i % n == 0:
flag = False
break
if flag:
print(f'{i}는 소수')
else:
print(f'{i}는 합성수 ')
숫자 입력: 10
2는 소수
3는 소수
4는 합성수
5는 소수
6는 합성수
7는 소수
8는 합성수
9는 합성수
10는 합성수
- 소인수 : 약수(인수) 중에서 소수인 숫자
- 소인수분해 : 1보다 큰 정수를 소인수의 곱으로 나타낸 것
inputNum = int(input('1보다 큰 정수 입력: '))
n=2
while n<= inputNum:
if inputNum % n ==0:
print(f'소인수 :{n}')
inputNum /= n
else:
n+=1
1보다 큰 정수 입력: 12
소인수 :2
소인수 :2
소인수 :3
inputNum = int(input('1보다 큰 정수 입력: '))
n = 2
searchNumbers = []
while n <= inputNum:
if inputNum % n == 0:
print(f'소인수 : {n}')
if searchNumbers.count(n) == 0:
searchNumbers.append(n)
elif searchNumbers.count(n)==1:
searchNumbers.remove(n)
inputNum /= n
else:
n+=1
print(f'searchNumbers : {searchNumbers}')
소인수 : 2
소인수 : 2
소인수 : 3
searchNumbers : [3]
- 공약수 : 두개 이상의 수에서 공통된 약수
- 최대공약수 : 공약수 중 가장 큰 수
num1 = int(input('숫자1 입력: '))
num2 = int(input('숫자2 입력: '))
maxNum = 0
for i in range(1, num1+1):
if num1 % i == 0 and num2 % i == 0:
print(f'{i}는 {num1}과 {num2}의 공약수')
maxNum = i
print(f'{num1}과{num2}의 최대공약수는 {maxNum}')
숫자1 입력: 20
숫자2 입력: 40
1는 20과 40의 공약수
2는 20과 40의 공약수
4는 20과 40의 공약수
5는 20과 40의 공약수
8는 20과 40의 공약수
10는 20과 40의 공약수
20는 20과 40의 공약수
20과40의 최대공약수는 20
- 유클리드 호제법 : x,y의 최대공약수는 y, x%y의 최대공약수와 같다.
num1 = int(input('숫자 입력 1: '))
num2 = int(input('숫자 입력 2: '))
temp1 = num1
temp2 = num2
while temp2 >0:
temp = temp2
temp2 = temp1 % temp2
temp1 = temp
print(f'{num1}와 {num2}의 최대공약수 : {temp1}')
for i in range(1,num1+1):
if temp1 % i ==0:
print(f'{num1},{num2}의 공약수 : {i}')
숫자 입력 1: 12
숫자 입력 2: 36
12와 36의 최대공약수 : 12
12,36의 공약수 : 1
12,36의 공약수 : 2
12,36의 공약수 : 3
12,36의 공약수 : 4
12,36의 공약수 : 6
12,36의 공약수 : 12
- 공배수 : 두개 이상의 수에서 공통된 배수
- 공배수 중 가장 작은 수
num1 = int(input('숫자 입력 1: '))
num2 = int(input('숫자 입력 2: '))
maxNum = 0
for i in range(1,num1+1):
if num1 % i == 0 and num2 % i ==0:
maxNum = i
minNum = num1*num2 // i
print(f'{num1}과{num2}의 최소공배수 : {minNum}')
숫자 입력 1: 10
숫자 입력 2: 12
10과12의 최소공배수 : 60
ship1 = 3;ship2=4; ship3=5
maxDay = 0
#ship1과 ship2의 최대공약수
for i in range(1,(ship1+1)):
if ship1 % i ==0 and ship2 % i ==0:
maxDay = i
#ship1과 ship2의 최소공배수
minDay = (ship1 * ship2) // maxDay
newDay = minDay
#newDay 와 ship3의 최대공약수
for i in range(1,(newDay+1)):
if newDay % i ==0 and ship3 % i ==0:
maxDay = i
#newDay와 ship3의 최소공배수 = ship1, ship2, ship3의 최소공배수
minDay = (newDay * ship3) // maxDay
print(f'{ship1},{ship2},{ship3}의 최소공배수: {minDay}')
3,4,5의 최소공배수: 60
특정 숫자 몇개를 사용하여 수를 표시하는 방법
dNum = int(input('십진수 입력'))
print(f'{dNum}의 2진수: {type(bin(dNum))}')
print(f'{dNum}의 8진수: {oct(dNum)}')
print(f'{dNum}의 16진수: {hex(dNum)}')
십진수 입력32
32의 2진수: 0b100000
32의 8진수: 0o40
32의 16진수: 0x20
결과창에 나온 진법들의 앞에 0b, 0o, 0x는 각각 2진수, 8진수, 16진수를 표시한 것
다른 방법으로도 변환 할 수 있다.
dNum = int(input('십진수 입력'))
print('{0:#b}, {0:#o}, {0:#x}'.format(dNum))
십진수 입력32
0b100000, 0o40, 0x20
진법 표시를 없애고 싶으면 코드에 '#'을 지우면 된다.
dNum = int(input('십진수 입력'))
print('{0:b}, {0:o}, {0:x}'.format(dNum))
십진수 입력32
100000, 40, 20
연속된 두 항의 차이가 일정한 수열
- 일반항 공식 :
- 등차 중항 공식:
- 등차 수열의 합 공식:
inputN1 = int(input('첫번째 항: '))
inputD = int(input('공차 : '))
inputN = int(input('n번째 항까지: '))
n=1
valueN = 0
while n <= inputN:
if n == 1:
valueN = inputN1
print(f'{n}번째 항의 값 : {valueN}')
n+=1
continue
valueN += inputD
print(f'{n}번째 항의 값 : {valueN}')
n+=1
첫번째 항: 2
공차 : 3
n번째 항까지: 7
1번째 항의 값 : 2
2번째 항의 값 : 5
3번째 항의 값 : 8
4번째 항의 값 : 11
5번째 항의 값 : 14
6번째 항의 값 : 17
7번째 항의 값 : 20
공식사용
inputN1 = int(input('첫번째 항: '))
inputD = int(input('공차 : '))
inputN = int(input('n번째 항까지: '))
valueN = inputN1 + (inputN -1)*inputD
print(f'{inputN}번째 항의 값: {valueN}')
첫번째 항: 2
공차 : 3
n번째 항까지: 7
7번째 항의 값: 20
inputN1 = int(input('첫번째 항: '))
inputD = int(input('공차 : '))
inputN = int(input('n번째 항까지: '))
valueN = 0
n = 1
sumN = 0
while n <= inputN:
if n == 1:
valueN = inputN1
sumN += valueN
print(f'{n}번째 항의 값까지의 합: {sumN}')
n+=1
continue
valueN += inputD
sumN += valueN
print(f'{n}번째 항의 값까지의 합 : {sumN}')
n +=1
첫번째 항: 5
공차 : 4
n번째 항까지: 7
1번째 항의 값까지의 합: 5
2번째 항의 값까지의 합 : 14
3번째 항의 값까지의 합 : 27
4번째 항의 값까지의 합 : 44
5번째 항의 값까지의 합 : 65
6번째 항의 값까지의 합 : 90
7번째 항의 값까지의 합 : 119
공식이용
inputN1 = int(input('첫번째 항: '))
inputD = int(input('공차 : '))
inputN = int(input('n번째 항까지: '))
valueN = 0
sumN = 0
valueN = inputN1 +(inputN -1)*inputD
sumN = inputN*(inputN1+valueN)/2
print(f'{inputN}까지 합 = {int(sumN)}')
첫번째 항: 5
공차 : 4
n번째 항까지: 7
7까지 합 = 119
연속된 두 항의 비가 일정한 수열
- 일반항 공식
- 등비 중항 구하는 식
- 등비 수열의 합 공식
inputN1 = int(input('첫번째 항: '))
inputR = int(input('공비 : '))
inputN = int(input('n번째: '))
valueN = 0
n = 1
sumN = 0
while n <= inputN:
if n == 1:
valueN = inputN1
print(f'{n}항 값 : {valueN}')
n+=1
continue
valueN *= inputR
print(f'{n}항 값 : {valueN}')
n+=1
첫번째 항: 2
공비 : 2
n번째: 7
1항 값 : 2
2항 값 : 4
3항 값 : 8
4항 값 : 16
5항 값 : 32
6항 값 : 64
7항 값 : 128
공식이용
inputN1 = int(input('첫번째 항: '))
inputR = int(input('공비 : '))
inputN = int(input('n번째: '))
valueN = inputN1 * inputR ** (inputN-1)
print(f'{inputN}항 값 : {valueN}')
첫번째 항: 2
공비 : 2
n번째: 7
7항 값 : 128
inputN1 = int(input('첫번째 항: '))
inputR = int(input('공비 : '))
inputN = int(input('n번째: '))
valueN = 0
sumN = 0
n = 1
while n <= inputN:
if n == 1:
valueN = inputN1
sumN = valueN
print(f'{n}항까지의 합 : {sumN}')
n+=1
continue
valueN *= inputR
sumN += valueN
print(f'{n}항까지의 합 : {sumN}')
n += 1
첫번째 항: 5
공비 : 3
n번째: 7
1항까지의 합 : 5
2항까지의 합 : 20
3항까지의 합 : 65
4항까지의 합 : 200
5항까지의 합 : 605
6항까지의 합 : 1820
7항까지의 합 : 5465
공식이용
inputN1 = int(input('첫번째 항: '))
inputR = int(input('공비 : '))
inputN = int(input('n번째: '))
sumN = inputN1*(1-(inputR ** inputN)) / (1-inputR)
print(f'{inputN}번째 항 까지의 합 : {int(sumN)}')
첫번째 항: 5
공비 : 3
n번째: 7
7번째 항 까지의 합 : 5465