분류 전체보기 134

[자료구조](12)[이진트리의 구현 1]

연결리스트로 구현이진트리 ADT데이터 연결 리스트로 구현할거라 포인터 필요root: 트리의 맨 위를 가리키는 포인터연산find(): 트리에 있는 데이터 찾기 (이 트리에서는 중복이 없다고 가정한다.)insert_l(): 노드 왼쪽에 데이터 넣기insert_r(): 노드 오른쪽에 데이터 넣기delete(): 트리에 데이터 제거하기기본 골조이거는 포인터가 2개인 것 빼곤 다를 바 없다.typedef struct Treenode { int data; //int형 데이터 담음 struct Treenode* left; //node를 가리키는 포인터 선언 struct Treenode* right;} TreeNode;TreeNode* makeTreeNode(int data){ Node* newN..

CS/자료구조 2025.05.06

[자료구조](11)[트리의 순회]

순회트리의 모든 노드를 중복 없이 모두 방문하기예시 트리 전위순회루트 -> 왼쪽 노드 -> 오른쪽 노드 순서예) 위 트리를 전위순회로 탐방하면1 -> 2 -> 4 -> 5 -> 3 -> 6 -> 7 중위순회왼쪽 노드 -> 루트 -> 오른쪽 노드 순서예) 위 트리를 중위순회로 탐방하면 4 -> 2 -> 5 -> 1 -> 6 -> 3 -> 7스택을 이용한 중위순회 구현스택의 특성을 이용해 중위순회를 구현할 수 있다.리프노드까지 스택에 노드를 넣으면 왼쪽으로 탐색스택에서 노드를 뺄 때 오른쪽 자식 노드 탐색예) 위의 트리에서 스택 S로 중위순회를 한다 하면 S = {1, 2, 4}로 넣어놓고, 4를 pop하고 4는 리프노드이므로 오른쪽 자식 없음, S = {1, 2} 2를 pop하고..

CS/자료구조 2025.05.05

[정수론](15)[이차잉여]

제곱수의 합동 성질임의의 b에 대해b^2 ≡ (m-b)^2 (mod m)증명(m-b)^2 ≡ m^2 -2mb + b^2 ≡ 0 + 0 + b^2 (mod m)따라서 b^2 ≡ (m-b)^2 (mod m)즉, 제곱수의 합동을 계산하려면 대충 반절까지만 보면 된다.m = 홀수: 1~(p-1)/2 까지 보고 이후는 대칭m = 짝수: 1~p/2 까지 보고 p/2 기준으로 대칭 이차잉여이차잉여(QR): mod p에 대해 어떤 제곱수와 합동인 수 즉, 어떤 b가 존재하여 a ≡ b^2 (mod p)라면 a는 p의 이차잉여이다.이차비잉여(NR): mod p에 대해 어떤 제곱수와 합동이 아닌 수 즉, a ≡ b^2 (mod p)인 b가 존재하지 않는다면 a는 p의 이차비잉여이다.0은 QR도 NR도 아니다.예..

정수론 2025.05.02

[정수론](14)[소수의 성질과 라빈-밀러 판정법]

소수의 성질적당한 소수 p, 홀수 q에 대해p - 1 = 2^k*q 꼴이라면 p∤a인 임의의 수 a에 대해 적어도 1개가 참이다.a^q ≡ 1 (mod p)a^q, a^2q, a^3q, ..., a^(2^(k-1)*q) 중 1개는 mod p에서 -1과 합동증명페르마의 소정리에 의해 a^p-1 ≡ 1 (mod p)따라서 a^(2^k*q) ≡ 1 (mod p)case 1: a^q ≡ 1 (mod p) 이라면?a^q(2^k) ≡ 1^(2^k) ≡ 1 (mod p)이므로 만족한다.case 2: a^q !≡ 1 (mod p) 이라면?a^(2^k*q) ≡ 1 (mod p) 이므로a^q, a^2q, a^3q, ..., a^(2^(k-1)*q) 중 제일 마지막 수가 1과 합동이다.따라서 제곱하면 1과 합동이 되는 수 ..

정수론 2025.05.01

[정수론](13)[소수 판정과 카마이클 수]

소수의 판정법root(n)보다 작거나 같은 소수로 나누기페르마의 소정리 -> 카마이클 수라는 반례가 있음! 카마이클 수합성수지만 페르마의 소정리를 만족하는 수gcd(a, m) = 1일때a^n ≡ a (mod n) 인 합성수 n 코어젤트의 카마이클 수 판정법n이 합성수라 가정할 때 n = 홀수 n을 나누는 모든 소수 p에 대해 p^2 ∤ n p-1 | n-1 이라면 n은 카마이클 수이다. 증명 모든 카마이클 수는 홀수이다모든 a에 대해 a^n ≡ a (mod n)을 만족해야 한다.a = n-1이라 가정할 때 n-1 ≡ -1 (mod n) 이므로,따라서 (n-1)^n ≡ (-1)^n ≡ 1 (mod p)따라서 n = 홀수 모든 카마이클 수는 서로 다른 소수의 곱이..

정수론 2025.04.30

[정수론](-)[p가 소수일 때 (p로 표현된 식) 소수 판정]

1. 관찰로 규칙성 찾기그냥 맨바닥 부터 시작하니까 규칙이 감이 안 잡히는데일단 작은 수에 대해서 몇개만 (p로 표현된 식)에 p를 넣어보자.짝수인지 홀수인지, 몇의 배수인지 보는 게 좋다.이때 edge case로 2를 조심해야 한다.2. mod로 정수 집합 분할하기일단 edge case인 2를 처리했다면 mod로 정수들의 집합을 나눠보자.(집합론에선 동치관계가 분할을 형성한다고 배운다.따라서 mod m에 대해 0~m-1에 있는 각각의 case 모음집의 합은 정수 집합과 같다.)2를 제외한 p는 모두 홀수이므로 만약 mod 3에 대해 분할하면p = 3k+1 or 3k+2 or 3 꼴이다.그 다음 각각의 경우에 대해 합성수인지 소수인지 판별하면 된다. 예) 소수 p가 5 이상일 때 p^2+2가 합성수임을 ..

[정수론](12)[RSA 암호]

암호학 둘러보기 9 참고(여기서 더 정수론 내용이 들어갔다.)과정메세지 보내는 A, 메세지 받는 B이고 공개된 파라미터 e가 있다.B의 공개키(N): N = p*q (p, q는 매우 큰 소수)B의 개인키([d]): [d]*e = 1 (mod[p-1]*[q-1]) (모듈러 역원 구하기. 만족하는 정수 d는 1개밖에 없으니 안심)A가 보낼 메세지 암호화(C): C = M^e (mod N)B는 자신의 개인키로 복호화(M): M = C^[d] (mod N)내가 암호학 둘러보기에선 이렇게 써놨다.이처럼 RSA는 상대의 공개키로 보낼 메세지를 암호화한다.이제 정수론적으로 다시 봐보자.과정매우 큰 소수 p, q를 선택하고 m = pq라고 두자p, q는 소수이므로 ϕ(m) = (p-1)(q-1)이후 ϕ(m)와 서로소인..

정수론 2025.04.29

[정수론](11)[연속제곱법, x^k 합동 구하기]

연속제곱법: a^k (mod m) 빨리 계산하기k를 2의 거듭제곱의 합으로 표현k = u0*A0 + u1*A1 +...+ ur*Ar각각의 제곱들을 mod 연산하기a ≡ A0 (mod m)a^2 ≡ A1 (mod m)a^4 ≡ A2 (mod m)a^8 ≡ A3 (mod m)...a^r ≡ Ar (mod m)구한 A들을 가지고 연산하기A0^u0*A1^u1*...*Ar^ur ≡ a^(u02^0 + u12^1 + ... ur2^r) ≡ a^k (mod m) 법 m에 대한 k제곱근 구하기x^k ≡ b (mod m)에서gcd(b, m)=1, gcd(k, ϕ(m)) = 1이라면ϕ(m) 계산하기ku-ϕ(m)v = 1인 양의 정수 u, v를 구함b^u를 연속제곱법으로 계산x ≡ b^u (mod m)증명x^(ku) ≡ x..

정수론 2025.04.28

[정수론](-)[원시 피타고라스 수가 n의 배수?]

임의의 원시 피타고라스 세 수 (a, b, c)가 있다. 이때 다음을 보여라a or b가 3의 배수인가?언제 a, b, c가 5의 배수인가?a or b가 3의 배수인가?정수 집합을 mod 3의 동치관계로 분할해보자.즉, a, b, c = 3k, 3k+1, 3k+2 꼴이다. (k=정수)만약 a, b 모두 3의 배수가 아니라면?a, b = 3k+1 or 3k+2 꼴이다.a^2 + b^2 = c^2에서 mod 3을 보기 위해 (3k+1)^2, (3k+2)^2에 대한 mod 3을 봐보자.(3k+1)^2 ≡ 3(3k^2+2k)+1 ≡ 1 (mod 3)(3k+2)^2 ≡ 3(3k^2+4k+1)+1 ≡ 1 (mod 3)따라서 a^2+b^2 ≡ 2 (mod 3)일 수밖에 없다.그러나, c가 될 수 있는 3k, 3k+1..

[정수론](10)[무한소수정리]

무한소수정리소수는 무한히 많다증명만약 소수가 유한하고 유한개의 소수 집합 R = {p1, p2, ..., pr}이 있다 가정A = p1*p2*...*pr + 1이라는 수를 잡으면만약 A = 소수?A는 R에 없는 소수이므로 모순 발생만약 A = 합성수?소수의 가약성에 의헤 A는 소수의 곱으로 표현 가능하다.이때 A를 나누는 가장 작은 소수를 q라 한다면 만약 q = pi라면 q|pi, q|A => q|1이어야 하는데 불가능 따라서 q != pi이걸 모든 p에 대해 반복한다면 모든 p가 q와 다른 수라는 걸 알 수 있다.따라서 q는 R에 없는 새로운 수 이므로 모순 발생디리클레의 등차수열 정리gcd(a, m) = 1인 정수 a, m이 있을 때, p ≡ a (mod m)인 소수 p가 무한히 많다...

정수론 2025.04.25
728x90
반응형