x 소인수 분해 • a의 소수인 인수를 a의 소인수라 함 최대공약수 • 2개 이상의 수의 공약수 중에서 최대인 것 12와 18의 최대공약수 → gcd(12,18) = 6 ... (a,p) = 1 RSA 암호 알고리즘 • 랜덤한 두 개의 큰 소수 p, q를 선택 ① n = p∙q 계산 ② Φ(n) = (p-1)∙(q-1) 계산 ③ gcd(e, Φ(n)) ... 이고, • 18 = 15 X 1 + 3 이므로 15, 3의 최대공약수도 d임 • 따라서, d = 3이다. • 두 수 a, b 가 커질 때 편리한 방법 확장 유클리드 호제법 • gcd
1) gcd(KeB , Ø(nB)) = 1 KeB· KdB≡ 1 mod Ø(nB) M ≡ CKdB mod nB ○ 두 개의 서로 를 선택한다. ... 1) gcd(KeA , Ø(nA)) = 1 KeA · KdA≡ 1 mod Ø(nA) C ≡ MKeB mod nB C pB , qB nB=pB· qB Ø(nB) = (pB ? ... (gcd(M,n) = 1 이라 가정) CKd ≡ (MKe)Kd mod n ≡ MKeKd mod n ≡ MtØ(n)+1 mod n ≡ MtØ(n) · M mod n ≡ (MØ(n))t
아래와 같은 c++ 코드에서처럼 GCD 알고리즘은 루프 내에서 정수 나눗셈 연산을 포함한다. int GCD(int x, int y) { x=abs(x); y=abs(y); do{ int ... ; gcd로 점프 gcd : cdq ;나눗셈을 하기 위해 idiv ebx ; eax를 ebx로 나눈다 mov eax, ebx ; ebx의 값을 eax로 이동 mov ebx, edx ... ; edx의 값을 ebx로 이동 cmp ebx, 0 ; 비교 jle return ; ebx가 0이거나 작으면 return으로 점프 jmp gcd ; gcd로 점프 return :
int a,b,g; printf("두 수를 입력 : "); scanf("%d%d",&a,&b); if(a>b) g=gcd(a,b); else g=gcd(b,a); printf("두 ... /* #include int gcd(int x, int y) { int r; while(y) { r = x % y; x = y; y = r; } return x; } main() {
\n"); scanf("%d%d", &m, &n); result = gcd(n, m);//함수를 호출하였다. printf(" 두 수의 최대공약수는 %d 입니다. ... //미리 선언함으로써, 메인 함수 밑에 어떠한 함수들이 있는지를 알 수 있게 한다. int gcd(int max, int min); int main(void)//main 함수 시작 ... \n", result); return 0;//main함수 종료 } int gcd(int max, int min)//사용자 함수 시작, 재귀 함수를 사용했다. { if(min == 0
이러한 해석을 통하여 본 프로젝트에 알맞은er {1+0.15/2s} = {N(s) _{Gcd}} over {D(s) _{Gcd}} 보상되지 않은 제어기의 전달함수는 다음과 같다. ... {D _{Gcd} (D _{Gcnm} D _{Gc1} D _{Gc2} +N _{Gcnm} N _{Gc1} D _{Gc2} +N _{Gcnm} N _{Gc1} N _{Gc2} )} ... = '); PD = tf([A 1],[1]); Gc=(PD*Gcd*Gcnm)/(1+(Gcnm*Gc1)+(Gcnm*Gc2*Gc1)); GH=Gc*Gp; GH=minreal(GH); T