ããã°ãã¯ãä»æ¥ã¯ç°¡åãªè¨äºãæ¸ãããã¨æãã¾ãã
çµç·¯
ã¤ã³ãã¸ã£ã¼ãºããã®ä»¥ä¸ã®è¨äºï¼
integers.hatenablog.com
ã§ãããªãã¨ãæ¸ããã¦ãã¾ããã
㨠ãå®éã«Wieferichç´ æ°ã§ãããã¨ã証æãããã¨æãã¨ããæç´ã«ã³ã³ãã¥ã¼ã¿ã§ ãè¨ç®ãã¦å®éã« ã§å²ãåãããã¨ã確èªããã¨ããæ¹æ³ãããã§ãããã
誰ãã« ããã³
ã®æ°å¤ãæãã¦ããã ãã¦ãããã«æ²è¼ãããã¨ããé¡æãããã¾ãããã¨ããããã³ã³ãã¥ã¼ã¿ã®ç¥èããªãç§ã«ã¯è¨ç®ã§ãã¾ããã
ããã¯ãããããªãã§ãããç¬
ã¨ãããã¨ã§ï¼ï¼ã¤ã® Wieferich ç´ æ°ã«å¯¾å¿ãã Wieferich å
ãè¨ç®ãããã¨æãã¾ãã
çµè«
Ruby ã®ã¤ã³ã¿ããªã¿ã® irb ãèµ·åãã¾ããããã¦ï¼ä»¥ä¸ã®ã³ãã³ããæã¡è¾¼ã¿ã¾ãã以ä¸ã§ãã
$ irb irb(main):001:0> 2**1092 => 53058536290991634737396540170283858539198978395771271474551549598742698935712572215646062825029533563666321339663466341699370021653261445199826360714064955944866263669556212233526813063143284104557957658305559283253118889734882642786544086063293282737405311454375777285526890640894984855797452638426498665888535738081213096656896 irb(main):002:0> (2**1092 - 1) / (1093*1093) => 44413494081518198849533662331181676408048705850648409260420047728448020243362336732919931147165011282532627859449483774480512704278211797105113184470137216826755192252750567098391923538330743259784219179278230914061886704575890192672947523551514530826548476962166943834989934818423641467742786909315203600294760836095968855
ã¨ããããã§ä»¥ä¸ãå¾ããã¾ããã
(2**1092 - 1) / (1093*1093) =
444134940815181988495336623311816764080487058506484092604200
477284480202433623367329199311471650112825326278594494837744
805127042782117971051131844701372168267551922527505670983919
235383307432597842191792782309140618867045758901926729475235
515145308265484769621669438349899348184236414677427869093152
03600294760836095968855
ããï¼ã¤ã®æ¹ããã®ããã«è¨ç®ã§ãã¾ããä¸ç¬ã§ãã
$ irb irb(main):001:0> 2**3510 => 4123678330405087685498374221366984954089317057900104262462784875123790425105688284686404828183633224942349909964891086086676925759584441340507088115762723035704344160664907942351632995309234873230720724730672756917176305067668035542444896101177345052548810184785328926774725935717835798651444434276670015032998880347558303319286200881282911325381616533722737115450145930916961537131913757215277371800137275864121652932255403611649883620607541869985422611380925136858353400304606133084255357430301930613665490583193975084451066213800348446463658847351044167257072998067401824974454641569423021718445571724956556610925411248121271018867103767845126877315661086297321467468234450388231735471475672432407097826847947552577946732477743671085802532103177658853957960953937628759295649081969101068141306491454515657017075167637032474324430969643933568914915807923425951587598028215460799776130796600200956964482108313216473786634870222110938349411949520063457665149056813193039601852026593109271569256781038420076239187040954693149511676801395787300912507360641024 irb(main):002:0> (2**3510 - 1) / (3511*3511) => 334520796088972249521877348439021970668521632739721161369535098675821420517060576000381989288791212882744471313690446137964973797173276821125312886582578611478247366977650981307933376764066392568931604121568430853982556435332145725059800751625407510200379324968525004887574798342438254532542061871273107080963907172449942149451295309041171196857856472222730442529942387270877079662957292072924194692348462862019578856430094554247490847263326276263972959410467791859782458556592908683564910041063272650091249253024609321548078112788894377402773838867245982841985001856264883339301580764026168131102596601830756476790112731766101023821142322513515270703975493247557273711212411266850689262438137212444584410816438611463126445540507282364292727564139076663071447173588839499449680836423127595497870629440119526450423839243326359360343016803674886367621102114875480786438133300992243020582891706847118395648270858476725732361584689735010985080129376523801272425983067189252024203544898529776057950334148453647549917538811754435566234549121063004160704463
ãããã£ã¦ï¼ä»¥ä¸ã®çµæãå¾ããã¾ããã
(2**3510 - 1) / (3511*3511) =
334520796088972249521877348439021970668521632739721161369535
098675821420517060576000381989288791212882744471313690446137
964973797173276821125312886582578611478247366977650981307933
376764066392568931604121568430853982556435332145725059800751
625407510200379324968525004887574798342438254532542061871273
107080963907172449942149451295309041171196857856472222730442
529942387270877079662957292072924194692348462862019578856430
094554247490847263326276263972959410467791859782458556592908
683564910041063272650091249253024609321548078112788894377402
773838867245982841985001856264883339301580764026168131102596
601830756476790112731766101023821142322513515270703975493247
557273711212411266850689262438137212444584410816438611463126
445540507282364292727564139076663071447173588839499449680836
423127595497870629440119526450423839243326359360343016803674
886367621102114875480786438133300992243020582891706847118395
648270858476725732361584689735010985080129376523801272425983
067189252024203544898529776057950334148453647549917538811754
435566234549121063004160704463
ãã£ããï¼ã²ã¨ä»äºããã¾ãï¼
èªä½ããã°ã©ã ã®ä¾é¤
ä»åã®ç§ã®è¨äºãã©ããã¦ãããªã«æ·¡ã ã¨ãã¦ããã®ãï¼ãã¨ä¸æè°ã«æã£ãæ¹ãã¾ãããï¼ï¼ããªãã§ãããã»ã»ã»ï¼ï¼
å®ã¯ï¼ï¼ã¤æ®å¿µãªãã¨ããã£ãã®ã§ãã
æ¬å½ã¯ï¼ãã®è¨äºã®è¨ç®ã¯ï¼èªä½ã®ããã°ã©ã ã§æããã¨æã£ãã®ã§ããRuby ã®ã¹ãä¹ã§ï¼ã¾ãããããªã«å¤§ããªå¤ã®è¨ç®ãã§ããã¨ã¯æããªãã£ãã®ã§ãã
ã¹ãä¹ã®è¨ç®ããã®ã¾ã¾ããã¨ï¼æéãããããããã ãããããç¹°ãè¿ãèªä¹æ³ãã使ããªãã¨ãã¡ã ãªãããããã°ãããã¨ãç¹°ãè¿ãèªä¹æ³ã«ã¤ãã¦ã¯ï¼ç§ã®æ§ããã°ã®è¨äºãåèã«ãªãã¾ãã
ãã£ããããã°ã£ã¦ããã°ã©ã ãä½ã£ãã®ã§ï¼ä¾é¤ã¨ãã¦å ¬éããã¦ãã ããã
# æ°å¤ã¯ã©ã¹ãæ¡å¼µ class Numeric # ç¹°ãè¿ãèªä¹æ³ã«ããï¼ã¹ãä¹ãå¹ççã«è¨ç® def power e v = 1 p = self while e > 0 if (e % 2) == 1 v = (v * p) end p = (p * p) e = e >> 1 end v end end # 1093 ãç¢ºèª base = 2 p = 1093 # åãè¨ç® puts "(#{base}^#{p-1} - 1) / (#{p}*#{p}) = " puts (base.power(p-1) - 1) / (p*p) puts "" # ãã¾ããç¢ºèª puts "(#{base}^#{p-1} - 1) % (#{p}*#{p}) = " puts (base.power(p-1) - 1) % (p*p) puts "" # 3511 ãç¢ºèª p = 3511 # åãè¨ç® puts "(#{base}^#{p-1} - 1) / (#{p}*#{p}) = " puts (base.power(p-1) - 1) / (p*p) puts "" # ãã¾ããç¢ºèª puts "(#{base}^#{p-1} - 1) % (#{p}*#{p}) = " puts (base.power(p-1) - 1) % (p*p) puts ""
ä¸å¿ï¼ããã°ã©ã ã¯åé¡ãªãåããã¨ã確èªãã¦ãã¾ãã
ããããªããï¼ç士çã«æººããï¼ã¨ã¯ãã®ãã¨ã§ããã
ããã§ã¯ä»æ¥ã¯ãã®è¾ºã§ã