본문 바로가기

Programming

Prime Number Algorithm 정의에 의한 알고리즘 (1과 자기자신 외에는 나누어 떨어지는 정수가 없는 양의 정수) 1. 정수 N을 입력받는다.2. 정수 I에 2를 대입한다. 2.1 N이 i로 나누어 떨어지는가? 2.1.1 나누어 떨어지면 소수가 아니다. 끝. 2.2 i를 하나 증가시킨다. 2.3 i가 N보다 작은가? 2.3.1 작으면 2.1로 돌아간다.3. 정수 N은 소수이다. 끝. 개선된 알고리즘 소수의 정의대로 작성한 위의 알고리즘도 개선의 여지는 있다. 소수를 판별하는 방법자체를 개선하는 것은 아니고, 소수 판별을 위해 N에 나누는 i의 범위를 좁혀보자는 것이다. 13이라는 숫자를 예를 들어보자. 13이라는 숫자가 소수인지 아닌지를 판별하기 위해 굳이 2부터 12까지의 숫자로 나누어 볼 필요가 있을까? 잘 생각해보면 2부터 1.. 더보기
Euclid's Algorithm의 개선 모든 알고리즘은 개선될 여지가 있다. 그래서 알고리즘의 공부가 재미있다. 이전의 빼기를 이용한 유클리드 알고리즘은 입력되는 두 수 u 와 v의 차이가 클 때 실행시간이 오래 걸린다. 만약에 32767과 1의 최대공약수를 구하는 경우는 32767번이나 뺄셈을 하게 된다. 그런데 250과 30을 뺄셈하여 만든 결과 10과 30을 자세히 살펴보면 10은 250을 30으로 나눈 뒤에 나머지임을 알 수 있다. 즉 10 = 250 % 30 인 것이다. 그래서 다음과 같은 식 4가 성립한다. GCD(u, v) = GCD(u%v, v) -----식 4 이 식 4를 이용하여 280과 30의 최대공약수를 구해보자. GCD(280, 30) = GCD(10, 30) -----식 4(280%30==10) GCD(30, 10) .. 더보기
Euclid's Algorithm 유클리드의 알고리즘은 최대공약수의 성질을 이용하여 뺄셈과 두 값의 교환이라는 기본적인 동작으로만 최대공약수를 구할 수 있다. A와 B라는 정수가 있다고 하자. 이 A와 B는 최대공약수로서 G를 갖는다고 한다면 A와 B는 다음과 같이 표현 할 수 있다. A = a * G (280 = 28 * 10) B = b * G (30 = 3 * 10) 위에서 소문자로 쓴 a와 b는 각 A와 B에서 G외의 인수들을 모두 곱한 값을 의미하고 a와 b는 서로소이다. 그렇다면 A - B와 B의 최대공약수는 얼마일까? A - B = a * G - b * G = (a - b) * G (a - b)와 b는 역시 서로소이므로 A - B와 B의 최대공약수는 역시 G이다. 즉, 쉽게 말로 표현한다면 GCD(u, v)라는 함수가 있어 .. 더보기
[MariaDB] 데이터 입력 string cmdStr = "INSERT INTO attitude (pitch, roll, heading)" + "VALUES('"+ attitude.Pitch + "', '"+ attitude.Roll + "', '"+ attitude.Yaw + "')" ; cmd = new OdbcCommand(cmdStr, conn); reader = cmd.ExecuteReader(); 더보기
Maria DB 연결 (using ODBC) /* ddd */ using System.Data.Odbc; OdbcConnection conn; OdbcCommand cmd; OdbcDataReader reader; private void button1_Click(object sender, EventArgs e) { conn = null; cmd = null; try { string connSrt = @"Driver={MariaDB ODBC 2.0 Driver};Server=localhost;UID=root;PWD=1234;DB=flight_data;Port=3306"; using (conn = new OdbcConnection(connSrt)) { conn.Open(); if (conn.State == ConnectionState.Open) { C.. 더보기