锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 琛ㄧず緇勫悎鏁幫紝鍗充粠P涓暟涓夊嚭J涓暟鐨勭粍鍚堢鏁幫紝涓? ≤ J ≤ P - 1錛屽垯P mod
銆傝瘉鏄庯細宸茬煡緇勫悎鏁?
= P! / ( J! * ( P - J )! )鏄暣鏁幫紝鍗矹! * ( P - J )! mod P! = 0銆傜敱浜嶱鏄礌鏁幫紝鎵浠ュ浠繪剰1 ≤ I ≤ P-1鏈? P錛孖 ) = 1銆傚洜姝ょ敱寮曠悊1鏈? P錛宩! * ( P - J )! ) = 1錛? ≤ J ≤ P - 1銆傝繘鑰岀敱寮曠悊1鎺ㄥ嚭錛氬綋1 ≤ J ≤ P - 1鏃禞! * ( P - J )! mod ( P - 1 )! = 0錛屽緱璇併?1 RETURN FAILE END IF NEXT I RETURN PASS 榪欎釜綆楁硶鐪嬭搗鏉ュ緢瀹岀編錛屼絾瀹為檯涓婁粠涓寮濮嬪畠灝辯姱浜嗕竴涓緢澶х殑閿欙紝閭e氨鏄浜庝換鎰忎笌Q浜掕川鐨凙閮芥湁AQ - 1 mod Q = 1錛岃繖鏄礌鏁扮殑鎬ц川錛屾槸绱犳暟鎴愮珛鐨勪竴涓繀瑕佹潯浠訛紝浣嗕笉鏄厖鍒嗘潯浠訛紒璁╂垜浠潵鐪嬩竴涓?9341榪欎釜鏁幫紝瀹冪瓑浜?3 * 37 * 61錛屼絾浠諱綍涓庡畠浜掕川鐨凙閮芥湁A29341 - 1 mod 29341 = 1鎴愮珛銆傝繖縐嶆暟瀛楄繕鏈変笉灝戯紝鏁板涓婃妸瀹冧滑縐頒負鍗″皵楹﹀厠鏁幫紝鐜板湪鏁板瀹朵滑宸茬粡鎵懼埌鎵鏈?016浠ュ唴鐨勫崱灝旈害鍏嬫暟錛屾渶澶х殑涓涓槸9585921133193329銆傛垜浠繀欏誨鎵炬洿涓烘湁鏁堢殑嫻嬭瘯鏂規硶銆傛暟瀛﹀浠氳繃瀵硅垂椹皬瀹氱悊鐨勭爺絀訛紝騫跺姞浠ユ墿灞曪紝鎬葷粨鍑轟簡澶氱蹇熸湁鏁堢殑绱犳暟嫻嬭瘯鏂規硶錛岀洰鍓嶆渶蹇殑綆楁硶鏄媺瀹劇背鍕掓祴璇曠畻娉曪紝鍏惰繃紼嬪涓嬶細棣栧厛紜畾N鏄惁涓哄鏁幫紝涓嶆槸濂囨暟鐨勫垽鏂け璐ャ傞夋嫨T涓殢鏈烘暣鏁癆錛屽茍涓旀湁 0 50閭d箞嫻嬭瘯澶辮鐨勬満鐜囧氨浼氬皬浜?0-30錛岃繖瀵逛簬鐩墠鐨勮綆楁満紜歡鏉ヨ宸茬粡瓚沖璇佹槑N灝辨槸绱犳暟浜嗐備笅闈㈡槸浼唬鐮併傜畻娉曚簲錛氭媺瀹劇背鍕掓祴璇曟硶嫻嬭瘯P鏄惁涓虹礌鏁般?C := 500 ;绱犳暟琛ㄥぇ灝?S[ 0 TO C ] ;绱犳暟琛?B := P - 1 T := 50 ;琛ㄧず榪涜嫻嬭瘯鐨勬鏁?A := 0 ;鐢ㄦ潵嫻嬭瘯閫氳繃鐨勯殢鏈烘暣鏁?FOR I := 0 TO C ;榪涜绱犳暟琛ㄥ垵姝ユ祴璇?IF P mod S[I] = 0 RETURN FAILE END IF IF P > 1 R := R + 1 ;璁$畻R NEXT X := 0 Y := 0 FOR I := 0 TO T A := S[ RAND() mod C ] ;鍏堣繘琛岃垂椹祴璇?IF A ^ ( P - 1 ) mod P <> 1 RETURN FAILE END IF X := A Y := A ^ ( M * R * 2 ) WHILE X <= Y IF X ^ M mod P = 1 BREAK END IF X := X ^ 2 NEXT IF X > Y RETURN FAILE END IF NEXT RETURN PASS ·浜屽厓涓嬈′笉瀹氭柟紼嬪湪綆楁硶姒傝堪鐨勭珷鑺傞噷鎴戜滑鏇劇粡璁ㄨ榪囧叕閽?鐨勬眰娉曪細鎵句竴涓暟D錛屼嬌寰? E * D ) mod ( ( P - 1 ) * ( Q - 1 ) ) = 1鎴愮珛銆備負浜嗘眰D錛屾垜浠厛瀵硅繖涓柟紼嬪彉褰€傚疄闄呬笂榪欎釜鏂圭▼鍙互鐪嬪仛AX mod B = 1錛屽嵆錛?AX = BY + 1錛孻涓轟竴鏁存暟銆?AX - BY = 1 榪欏氨鏄竴涓簩鍏冧竴嬈′笉瀹氭柟紼嬶紝鏈夊凡鐭ユ暟A銆丅錛屾湭鐭ユ暟X銆乊銆傛垜浠幇鍦ㄩ渶瑕佹眰鐨勬槸X錛岄偅涔堝氨鏄眰榪欎釜鏂圭▼瀵逛簬X鐨勬渶灝忔暣鏁拌В銆傜敱浜庢柟紼嬫湁涓や釜鏈煡鏁幫紝鎵浠ュ繀欏誨寲綆鏂圭▼錛屼嬌寰椾竴涓湭鐭ユ暟鐨勭郴鏁頒負0鏃舵墠鑳藉緱瑙c傝B > A鏃舵湁錛?AX - BY = 1 閭d箞鍙互璁や負B = AN + M錛屽垯鏈夛細 AX - ( AN + M )Y = 1 AX - ANY - MY = 1 A( X - NY ) - MY = 1 瀹為檯涓奙灝辨槸B mod A鐨勫鹼紝璁綳’ = X - NY錛孊’ = B mod A鍒欐湁AX’ - B’Y = 1錛屼笖A > M鎴愮珛銆傛帴鐫鍙互鐢ㄥ悓鏍風殑鏂規硶鏉ュ寲綆A錛屾渶緇堝繀鑳藉皢涓涓郴鏁板寲涓?銆傛鏃舵眰鍑哄彟涓涓湭鐭ユ暟鐨勮В錛屽啀鎸夐嗗簭浠e叆涓婁竴姝ョ殑鏂圭▼錛屾眰鍑哄彟涓涓湭鐭ユ暟鐨勮В錛屽啀浠e叆涓婁竴姝ョ殑鏂圭▼錛屼竴鐩撮掓帹鐨勭涓涓柟紼嬶紝鏈緇堝嵆鍙幏寰梄鍜孻鐨勬渶灝忔暣鏁拌В銆傚洜涓烘瘡涓姝ラ掓帹鐨勬柟紼嬬殑浣欐暟鐩稿悓錛屾墍浠ユ垜浠О榪欎簺鏂圭▼涓?#8220;涓嬈″悓浣欏紡”銆傝繖涓畻娉曡縐頒負嬈у嚑閲屽痙鎵╁睍綆楁硶錛岃屾鍑犻噷寰風畻娉曞叾瀹炲氨鏄眰鍏洜寮忕殑杈楄漿鐩擱櫎娉曪紝澶у鏁版湅鍙嬪湪涓鏃跺氨瀛﹁繃浜嗭紝浣嗘槸鎴戜滑涓嬮潰浼氱敤鍒幫紝鎵浠ユ垜榪欓噷綆鍗曠殑鐢ㄤ吉浠g爜鏉ユ弿榪頒竴涓嬫鍑犻噷寰風畻娉曘傜畻娉曞叚錛氭眰A鍜孊涓ょ浉寮傝嚜鐒舵暟鐨勬渶澶у叕鍥犳暟錛屽彟R涓虹粨鏋溿?IF A P銆傚茍涓旀湁姝f暣鏁癉浣縉D mod P = 1鎴愮珛錛屾眰D銆?IF N鍜孭鐨勬渶澶у叕鍥犳暟 <> 1 ;璋冪敤綆楁硶鍏?RETURN FAILE END IF LT := 1 ;宸︿笂 RT := N mod P ;鍙充笂 LD := 0 ;宸︿笅 RD := P ;鍙充笅 X := 0 ;涓棿鍙橀噺 WHILE RT <> 1 X := RD / RT RD := RD % RT IF RD = 0 RD := RT LD := ( X - 1 ) * LT + LD ELSE LD := X * LT + 1 END IF X := RT / RD RT := RT % RD IF RT = 0 RT := RD LT := ( X - 1 ) * LD + LT ELSE LT := X * LD + 1 END IF NEXT D := LT ·緇撹鍒扮幇鍦紝RSA綆楁硶涓墍娑夊強鍒扮殑鎵鏈夌畻娉曟垜浠兘宸茬粡璁ㄨ榪囦簡銆傚疄闄呰繕鏈変竴涓繍綆楋紝灝辨槸縐侀挜鐨勮幏寰楀姙娉曪細璁$畻寰楀埌涓? P - 1 ) * ( Q - 1 )鐨勫間簰璐ㄧ殑鏁存暟E銆傛垜鎯呮効涓嶆妸瀹冪О涔嬩負綆楁硶錛屽洜涓哄彧闇瑕佷竴涓驚鐜拰涓涓垽鏂氨鍙互瀹屾垚錛屾墍浠ヨ繖閲屼篃灝辨病鏈夊繀瑕佸瀹冨鍔犺榪頒簡銆?·闄勫綍璐歸┈灝忓畾鐞嗙殑璇佹槑錛氬紩鐞?錛氳M錛孉鐨勬渶澶у叕綰︽暟( M錛孉 ) = 1錛屼笖M鏁撮櫎AB錛屽嵆M mod AB = 0錛屽垯M mod B = 0銆傚紩鐞?錛氳P鏄礌鏁幫紝
]]>
HDOJ榪囦袱鐧撅紝鍏堟嬁榪欎簺棰樹笅鎵?/span>
]]>
]]>