ÀÏÂ÷ ÇÕµ¿½ÄÀ» Ǭ´Ù


ÇÔ¼ö¸í
congruence  ÀÏÂ÷ ÇÕµ¿½Ä a x¡Õb (mod m)¸¦ ä¿ì´Â x ¸¦ ¿ä±¸ÇÑ´Ù
Çü½Ä
int congruence(int a, int b, int m);
Àμö
a  ÇÕµ¿½Ä¿¡ ÀÖ´Â a
b  ÇÕµ¿½Ä¿¡ ÀÖ´Â b
m  ÇÕµ¿½Ä¿¡ ÀÖ´Â m
ÇÔ¼öÄ¡
ÇÕµ¿½ÄÀÇ ÇØxÀÇ °ª(0¡Âx£¼m). ÇØ°¡ Á¸ÀçÇÏÁö ¾ÊÀ» ¶§´Â¡ª1.
ÁÖÀÇ »çÇ×

¿ë·Ê(congruence-test.c )

ÇÁ·Î±×·¥(congruence.c )
int congruence(int a, int b, int m)
{
    int c, d, e, f;
    int q, r;
    int tmp;
    
    c = a;
    e = b;
    d = m;
    f = 0;
    while ((r = c % d) ! = 0) {
        q = c / d;
        c = d;
        d = r;
        tmp = f;
        f = e - q * f;
        e = tmp;
    }
    if (b % d ! = 0) return -1;
    q = (f/d) % (m/d);
    if (q < 0) q += m/d;
    return q;
}
¼³¸í
ÇÕµ¿½Ä a x¡Õb (mod m)¸¦ Ç®·Á¸é , Çϳª ´õ ÀÚ¸íÇÑ ÇÕµ¿½Ä m x¡Õ0 (mod m)À» ÀÌ¿ëÇØ, µ¿Ä¡ÀÎ º¯ÇüÀ» ¹Ýº¹Çϸé ÁÁ´Ù. ¸ð·¡ , x ÀÇ °è¼ö a ¿Í m ¿¡ ´ëÇؼ­ EuclidÈ£Á¦¹ýÀ» ÀÌ¿ëÇØ, x ÀÇ °è¼ö¸¦ ÀÛ°Ô º¯ÇüÇØ ³ª°£´Ù.

°ü·Ã ÇÔ¼ö
EuclidÈ£Á¦¹ý