일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 배열 섞기
- 코틀린 Hello World!
- NumPy
- matrix fo a linear transformation
- matrix trnasformations
- Big Theta
- 빅세타
- 알고리즘 분석의 실례
- linear dependence
- recursive algorithms
- nonhomogeneous linear system
- Big Omega
- Big-Oh notation
- includepdf
- 코틀린 시작하기
- 빅오 표기법
- 빅오메가
- nontrivial solution
- itertools
- 일차변환
- trivial solution
- 이진 탐색
- Big-O 예제
- one-to-one
- homogeneous linear system
- python
- 페이지 겹칩
- 재귀함수
- 랜덤 순서 배열
- Big-Oh 예제
- Today
- Total
목록Python (28)
코딩 연습
파이썬에서 복소수를 표현하는 방법은 두 가지가 있다. >>> a = 2 + 3j >>> b=complex(3, -4) >>> a (2+3j) >>> b (3-4j) 파이썬에서는 imaginary number의 약자 \(i\) 대산 \(j\) 나 혹은 \(J\) 를 사용한다. 그래서 직접 \(a=2+3j\) 와 같이 표현할 수도 있고, 혹은 \(b={\rm complex}(3, -4)\) 처럼 실수부와 허수부를 구분하여 표현할 수도 있다. 또한 실수부와 허수부를 따로 불러낼 수도 있다. >>> b.real 3.0 >>> b.imag -4.0 그리고 상식적 수준에서 다음과 같이 복소수의 연산이 가능하다. >>> a + b (5-1j) >>> a - b (-1+7j) >>> a * b (18+1j) >>> a..
여러 문제를 풀다 보면 분수를 가지고 계산을 해야 할 때가 있다. 예를 들어, \(\dfrac{1}{2} + \dfrac{1}{3}\) 의 결과로 우리가 원하는 것은 \(\dfrac{5}{6}\) 이지만 거의 모든 계산기에서 결과는 \(0.83333333333334\) 로 표시된다. 즉, 결과 자체도 분수 형태로 받고 싶지만 그게 내 맘대로 안되는 것이다. 그래서 결국 분자, 분모를 이용하여 분수 계산을 해주는 함수를 따로 만들어 사용하곤 했었는데, 알고 보니 파이썬 기본 모듈에 이런 분수의 계산을 해주는 것이 있는 걸 알게 되었다. 사용법은 다음과 같다. 먼저 \(\rm fractions\) 모듈에서 \(\rm Fraction\) 클래스를 \(\rm import\) 한다. 분수 \(\dfrac{1}{2..
프로젝트 오일러 문제를 풀다보면 두 자연수의 최대공약수를 구해야 하는 경우가 빈번히 발생한다. 이때 유클리드 알고리즘(유클리드 호제법)을 이용하여 쉽게 최대공약수를 구하는 함수를 소개하고자 한다. def gcd(a, b): if a < b: (a, b) = (b, a) while b != 0: (a, b) = (b, a % b) return a 먼저 \(a\) 쪽이 항상 크도록 해주고, \(a\)와 \(b\) 의 최대공약수는 \(b\)와 \(a\) 를 \(b\)로 나눈 나머지와의 최대공약수와 같기 때문에, 나머지가 \(0\) 이 될때까지 이 작업을 반복해 준다. \(b\) (=나머지)가 \(0\) 일 때의 \(a\) 값이 \(a, \;b\) 의 최대공약수가 된다.
처음으로 파이썬에서 완전제곱수를 판별하는 함수를 만들려고 단순히 제곱근이 정수이면 된다고 생각해었다. 그래서 다음과 같은 함수를 만들었었다. def issquare(n): temp = n ** 0.5 if int(temp) == temp: return True else: return False 그런데 이게 제대로 작동을 안하는 것이었다. \(89011483755109777\) 은 완전제곱수가 아닌데도 제곱근이 정수로 출력되는 것을 볼 수 있다. 소숫점 이하가 아주 작을 경우 버림을 해버리기 때문에 발생하는 일이다. 따라서 이것만으로는 완전제곱수인지 판단하기 어려우므로, 제곱근을 다시 제곱해서 원래의 수가 나오는지 확인해야 한다. def issquare(n): temp = n ** 0.5 if int(te..
import math def primecheck(n): if n == 2 or n == 3: return True if n % 2 == 0 or n == 1: return False for i in range(3, int(math.sqrt(n)) + 1, 2): if n % i == 0: return False return True if __name__ == "__main__": yn = "y" while yn == "y" or yn == "Y": n=input("소수인지 확인하고 싶은 수는? ") if primecheck(int(n)): print("%d는(은) 소수입니다." % int(n)) else: print("%d는(은) 합성수입니다." % int(n)) yn = input("계속 확인하시겠습니..
프로그래밍을 이용하여 수학문제를 풀때 의외로 소인수 분해를 해야할 일이 많아진다. 소인수 분해의 원리는 다들 잘 알고 있으리라 생각된다. 일단 소수들의 리스트를 만들어 놓고, 그것들을 하나씩 불러내서 소인수 분해 하고자 하는 수를 나누어 떨어지는 동안 계속 나눈다. 나누어 떨어지지 않게 되면 소수들의 리스트에서 다음 소수를 불러내 똑같은 작업을 반복한다. 이 작업을 몫이 1이 될때까지 계속한다. 예를 들어, 80을 소인수분해 하면 (몫, 소인수)가 다음과 같이 변해 갈 것이다. (40, 2) (20, 2) (10, 2) (5, 2) 이제 5는 2로 나누어 떨어지지 않으므로 3을 불러낸다. 그러나 5는 3으로도 나누어 떨어지지 않으므로 5를 불러낸다. (1, 5) 이제 몫이 1이 되었으므로 소인수 분해를 ..
순열의 경우를 나열하는 것과 조합의 경우를 나열하는 것은 비슷한 듯 비슷하지 않은것 같다. 일단 원리는 다음과 같다. abcde 중 3개를 선택하는 조합을 생각한다면 먼저 abc 가 될 수 있고, 이제 마지막 알파벳을 하나씩 오른쪽으로 옮겨가며 선택한다. 그래서 얻을 수 있는 것이 abd, abe가 된다. 알파벳이 마지막까지 오게 되면 이제 알파벳 b을 오른쪽으로 옮겨 똑 같은 작업을 반복한다. 그래서 얻을 수 있는 것이 acd, ace가 된다. 다시 c를 오른쪽으로 한 칸 옮기면 ade가 선택된다. 이제 a를 오른쪽으로 한 칸 옮겨 같은 작업을 반복한다. 그래서 얻을 수 있는 것이 bcd, bce가 되고, 다시 c를 오른쪽으로 한 칸 옮겨 얻는 것이 bde가 된다. 마지막으로 b를 한 칸 오른쪽으로 옮..