èæ¯ã¨ãã¦ã¯ããã¡ãã®è¨äºã§ãã
1431655766
, 1717986920
, 1431655782
, 1431655768
, 1840700272
, 1431655966
, -1431655056
ãªã©ãã¾ãã¾ãªãã¸ãã¯ãã³ãã¼ãç»å ´ãã¾ãã
ã$x$ ã $3$ ã®åæ°ã§ãããã¨ãããã£ã¦ããã¨ãã$1431655766x \equiv \tfrac23 x\pmod{2^{32}}$ ã¨ãªããã®ãããªæ§è³ªãæã¡ã¾ãã
ä¸è¬ã«é¤ç®ã¯éãå¦çãªã®ã§ãçµæãåãã«ãªããããªå¥ã®å½ä»¤ï¼ä¹ç®ãªã©ï¼ã«ç½®ãæããæé©åãå ¸åçã«è¡ãããã®ã§ããããã®éç¨ã§åºã¦ããå¤ã«ãªãã¾ãã
ä»åã¯ãããããå¤ãèªåã§æ±ããããããã«ãªã£ã¦ã¿ããã¨ããåã§ãï¼ã³ã³ãã¤ã«æå®æ°ã§ããã°ãå¤ãã®å ´åã¯ã³ã³ãã¤ã©ãåæã«æé©åãã¦ãããã¨ã¯æãã¾ãï¼ã
exact division ã¨ããã®ã¯ããã¾ãã®åºãªãé¤ç®ã®ãã¨ãæãã¦ãã¾ãã
æ¬é¡
ã¾ããä¸è¨ã®è¨äºã§ãæ¸ãã¦ãã¾ããã$1431655766 = \tfrac13(2^{32}+2)$ ã§ãã$2^{32}+2\equiv 0\pmod{3}$ ã§ãããã¨ã«æ³¨æãã¦ããã¾ãããã $$ \begin{aligned} 3x\times 1431655766 &= 3x\times\tfrac13(2^{32}+2) \\ &= x\times (2^{32}+2) \\ &\equiv x\times(0+2) = 2x \pmod{2^{32}} \end{aligned} $$ ã¨ãªãããã§ãã
以éã$ax\times n\equiv bx \pmod{2^{32}}$ ã¨ãªããã¨ã $ax\xmapsto{n} bx$ ã¨è¡¨ããã¨ã«ãã¾ããä¸è¨ã§è¨ãã° $3x\xmapsto{1431655766}2x$ ã§ãã
ä¾
ã§ã¯ãæå§ãã« $3x\xmapsto{n}1x=x$ ã¨ãªããã㪠$n$ ã«ã¤ãã¦èãã¦ã¿ã¾ãããã ååå¼ã§ $2^{32}$ ãæ¶ãã¦ããããã¨ã ãã«ç®ãè¡ã£ã¦ã$\tfrac13(2^{32}+1)$ ãï¼ã¨æã£ã¦ãã¾ãã¨å±ãªãã§ãã$2^{32}+1\not\equiv 0\pmod{3}$ ãªã®ã§ã$\tfrac13(2^{32}+1)$ ãæ´æ°ã«ãªã£ã¦ãããªããã§ããã
ã¨ããããã§ã$q\cdot 2^{32}+1 \equiv 0\pmod{3}$ ãªã $q$ ããã£ã¦ãããã¨ããããããã§ãã ããã¯ç«¶ãã er ãªãããå ¨å¡ããã£ã¦ãã¦*1ã $$q \equiv (-1)\cdot (2^{32})^{-1} \pmod{3}$$ ã§ãããéå ã使ããããªã£ãã¨ã㯠$\gcd(2^{32}, 3) = 1$ ã§ãããã¨ãã¡ããã¨æèããä¸ã§ããã¾ãããã
$3^{-1}\bmod 2^{32}$ ã§ããã° Newton æ³ã使ã£ã¦ãã¾ãããæ¹æ³ãããã®ã§ããã$(2^{32})^{-1} \bmod 3$ ã ã¨ãã¾ãæ¹æ³ã¯ãããã§ããããããããã¾ããã$x^{-1} \bmod y$ ãããã£ã¦ã $y^{-1}\bmod x$ ãæ±ããã®ã«ã¯å½¹ç«ããªããããªæ°ããã¾ãã
ã¨ãããã㧠Euclid ã®äºé¤æ³ãªããªããªãã§æ±ããã¨ã$(2^{32})^{-1} \bmod 3 = 1$ ã¨ãããã¾ãï¼ãããã $2^{32}\equiv 1\pmod 3$ ãªã®ã§ï¼ã ãã£ã¦ã$q \equiv -1 \equiv 2$ ã¨ãããã¾ãã
ããªãã¡ã$3x\xmapsto{\tfrac13(2\cdot 2^{32}+1)}x$ ã¨ããããã§ãã${\tfrac13(2\cdot 2^{32}+1)}=2863311531$ ã§ãã
ä¸è¬å
$a=1$ ã®å ´åã¯åã« $x\xmapsto{b} bx$ ã¨ã§ããã®ã§ã以éã¯é¤å¤ãã¾ãã
å¥æ° $a\gt 1$ ã«å¯¾ãã¦ã$2^k\cdot ax\xmapsto{n} bx$ ãªã $n$ ãæ±ãããã§ãã ããããã·ããæ¼ç®ã¯é«éã§ãããã$(2^k\cdot ax)\gg k = ax$ ãç¨ãã¦ã$ax\xmapsto{n}bx$ ã«å¸°çããããã¨ãã§ãã¾ãã $a$ ã¯å¥æ°ãªã®ã§ã$\gcd(2^{32}, a) = 1$ ãä¿è¨¼ããã¦ãããããã§ãã
ãããããã¨ã¯ $\tfrac 1a(q\cdot 2^{32}+b)$ ã®å½¢ã®æ´æ°ãæ¢ããã¨ã§ããã㯠$q\cdot 2^{32}+b \equiv 0 \pmod a$ ã解ããã¨ã«ãã£ã¦å¾ããã¾ãã $$q \equiv (-b)\cdot (2^{32})^{-1} \pmod a$$ ã§ããã
æ°ã¥ãã¦ãã¾ã£ãã®ã§ããã $$ q \equiv (-b) \cdot (2^{-1})^{32} \pmod a $$ ã§ããã$a$ ãå¥æ°ã§ãããã¨ãã $2^{-1}\bmod a = \tfrac{a+1}2$ ãªã®ã§ã $$ q \equiv (-b) \cdot (\tfrac{a+1}2)^{32} \pmod a $$ ã§ããã32 ä¹ã®é¨åã¯ç¹°ãè¿ãäºä¹æ³ã£ã½ãããã¾ãããã
warning: $a = 2^{32}-1$ ã®ã¨ã㯠$\tfrac{a+1}2$ ã®è¨ç®éç¨ã§ãªã¼ãã¼ããã¼ãããã®ã§æ³¨æãã¾ãããã$\floor{\tfrac a2}+1$ ã¨ããã®ãããã§ããããã
ä¸çå¼è©ä¾¡
ãã注ææ·±ããªãããã«ã$\tfrac1a(q\cdot 2^{32}+b)$ ã®å¤§ããã«ã¤ãã¦è¦ç©ãã£ã¦ããã¾ããããã $1\le q\le a-1$ ã§ãããã¨ã¨ã$a$, $b$ ã 32-bit 符å·ãªãæ´æ°åã§ãããã¨ããã $$ \begin{aligned} \tfrac1a(q\cdot 2^{32} + b) &\le \tfrac1a( (a-1)\cdot 2^{32} + (2^{32}-1)) \\ &= \tfrac{a-1}a\cdot 2^{32} + \tfrac1a\cdot2^{32}-\tfrac1a \\ &\lt 2^{32} \end{aligned} $$ ã§ããæ´æ°æ§ããã$\tfrac1a(q\cdot 2^{32}+b)\le 2^{32}-1$ ã§ããããã£ã¦ãäºãåè¨ç®ã 64-bit æ´æ°ãªã©ã§è¡ã£ãå¾ã¯ã32-bit ã«åã¾ãå¤ã«ãªã£ã¦ãããã¨ããããã¾ã*2ã
ãªãã$a + b = 2^{32}$ ã¨ãªãã±ã¼ã¹ã§ã¯ $\tfrac1a(q\cdot 2^{32}+b) = 2^{32}-1$ ã¨ãªãããã§ãã $$ \begin{aligned} q &\equiv (-b) \cdot (2^{32})^{-1} \\ &= -(2^{32}-a)\cdot (2^{32})^{-1} \\ &\equiv -(2^{32})\cdot (2^{32})^{-1} \equiv -1 \pmod{a}. \end{aligned} $$ ãã£ã¦ã $$ \begin{aligned} \tfrac1a(q\cdot 2^{32}+b) &\equiv \tfrac1a(-2^{32}+b) \\ &= \tfrac1a(-a) \\ &= -1 \equiv 2^{32}-1 \pmod {2^{32}} \end{aligned} $$ ã¨ãªãã¾ãã
å ·ä½ä¾
ã¨ããããã§ããã好ããªããã«ã§ãã¦ãã¾ãããã§ãã 試ãã« $271x\xmapsto{n} 314x$ ã¨ãªããã㪠$n$ ã§ãæ±ãã¦ã¿ã¾ããããã $$ \begin{aligned} q &\equiv (-314)\cdot (\tfrac{271+1}2)^{32} \\ &\equiv 228 \cdot 136^{32} \\ &\equiv 228\cdot 99 \equiv 79 \pmod {271} \end{aligned} $$ ã¨åºã¾ããããã£ã¦ãææã®ãã¸ãã¯ãã³ãã¼ $n$ 㯠$\tfrac1{271}(79\cdot 2^{32}+314) = 1252038438$ ã«ãªãããã§ãã
>>> 123456760 % 271 0 >>> 123456760 * 1252038438 % 2**32 143045840 >>> 123456760 // 271 * 314 143045840
ãã£ã¦ãããã§ããã
ããã
ããããé¡ã®ãã¨ãç¥ã£ã¦ããã¨ãã³ã³ãã¤ã©ã®åºããã¢ã»ã³ããªã«ä¸æè°ãªæ°ãå ¥ã£ã¦ãã¦ãé©ããã«æ¸ãã ããããã§ãã
ã³ã³ãã¤ã©ã®åºããã¢ã»ã³ããªãçºãã¦æ°ã«ãªã£ãã¨ããã«ã¤ãã¦èãã¦ã¿ãã¨ãæ°ããçºè¦ããã£ã¦é¢ç½ãã§ããã
*1:ããããªãã£ã人ã¯ãããã競ãã er ã«ãªãã¾ãããã
*2:ã¨ã¯ãããä»®ã«ãªã¼ãã¼ããã¼ããã¨ãã¦ã $2^{32}$ ãæ³ã¨ãã¦ä¹ç®ãã¦ããã ããªã®ã§ã$n\bmod 2^{32}$ ãèããã°ããã ãã®ãããªæ°ããã¦ãã¾ãï¼ï¼ãã¶ãï¼ã