ユークリッドアルゴリズム
3046 ワード
ユークリッドアルゴリズム
ユークリッドアルゴリズムはまた、2つの整数a、bの最大公約数を計算するための転々相除算とも呼ばれる.その計算原理は以下の定理に依存する.
定理:gcd(a,b)=gcd(b,a mod b)
ユークリッドアルゴリズムはまた、2つの整数a、bの最大公約数を計算するための転々相除算とも呼ばれる.その計算原理は以下の定理に依存する.
定理:gcd(a,b)=gcd(b,a mod b)
:a a = kb + r, r = a mod b
d a,b ,
d|a, d|b, r = a - kb, d|r
d (b,a mod b)
d (b,a mod b) ,
d | b , d |r , a = kb +r
d (a,b)
(a,b) (b,a mod b) , ,
-----------------------------------------------------------------
P
a、p, b, ab mod p =1, ,b a p 。
:a p gcd(a,p) = 1
:
gcd(a,p) = 1, オーラの ,aφ(p) ≡ 1 mod p,
aφ(p)-1 mod p a p 。
a p b
ab ≡ 1 mod p
ab = kp +1 , 1 = ab - kp
gcd(a,p) = d
d | 1
d 1
-----------------------------------------------------------------------
(a,b) , a b b a , C :
intgcd(inta,intb,int&ar,int&br)
{
intx1,x2,x3;
inty1,y2,y3;
intt1,t2,t3;
if(0==a)
{// 0,
ar=0;
br=0;
returnb;
}
if(0==b)
{
ar=0;
br=0;
returna;
}
x1=1;
x2=0;
x3=a;
y1=0;
y2=1;
y3=b;
intk;
for(t3=x3%y3;t3!=0;t3=x3%y3)
{
k=x3/y3;
t2=x2-k*y2;
t1=x1-k*y1;
x1=y1;
x1=y2;
x3=y3;
y1=t1;
y2=t2;
y3=t3;
}
if(y3==1)
{
//
ar=y2;
br=x1;
return1;
}else{
// 1,
ar=0;
br=0;
returny3;
}
}
ユークリッドアルゴリズムは、 の と のユークリッドアルゴリズムとが している. け の を すると かりにくいです. を する を30 えた.まず、 するの の つの を り す.gcd(a,b)=dであれば、m,nが し、d=ma+nnが する.この をa、bの み わせ d、m、nと ぶ.d=1の 、m a+n b=1があり、この 、mはa bの であり、nはb aの であることがわかる. の を するために、 の におけるxi、yiをtiの と なし、 の (t 1、t 2、t 3)を し、 で します.ユークリッドアルゴリズムを して した 、どの もaを させます.×t 1+b×t 2=t 3 :1 × a + 0 × b = a
:0 × a + 1 × b = b
k , k+1
k-1 k
t1(k-1) t2(k-1) t3(k-1)
t1(k) t2(k) t3(k)
:
t1(k-1) × a + t2(k-1) × b = t3(k-1)
t1(k) × a + t2(k) × b = t3(k)
, t3(k-1) = j t3(k) + r
:
t3(k+1) = r
t2(k+1) = t2(k-1) - j × t2(k)
t1(k+1) = t1(k-1) - j × t1(k)
t1(k+1) × a + t2(k+1) × b
=t1(k-1) × a - j × t1(k) × a +
t2(k-1) × b - j × t2(k) × b
= t3(k-1) - j t3(k) = r
= t3(k+1)
, t3 1 , t1× a + t2 × b = 1, ,t1 a b ,t2 b a 。