clear

a       = 058980
b       = 0a
c       = big_mul( $a, $b )

c       = 01
hfor l = 01 to 10
    
c   = big_mul( $c, $l )
hnext l

d       = expr10( 0x$c )

// a = big_mod_mul( $a, $b, $n )

k       = mul( 8899, aabb )
k       = big_mul( 8899, aabb )

n       = B305E4AD9B9D923E9ED2F72B3C419AB2759B1E14F11C3897DF91733C056E24C68848D79CD4DA1B4F5B82FC5DD5E144A6DF6BBEBC0353704C046CB5DD782959C2CC0D91473F9F87C2C46664EA16A82B0B2959BE6F2DCAB7A34668789B856395D23F3DEB7ECBDECEF454313A712C52FCA4603C4406CA3A5F7A74DFFFB0655B5E8BF011B4DCBD9D64694150EE59C1CA1AE2C22792BDFA2301E19126CEF34B8AFAB6260438A6A215D753E951DAECE82D1E17DFC28CA357D689BB2432B06FF25489AA9DCEE3CECC4304353CE2E2832079990BE045B1DD7FEE7396C3E91B4DC7027996F17DD4642793BD4ECC833E51169C0ABC88A52DD2B530DA2AE960578E2F2AA0F1

c       = AF2B763EA10A137BFAB9FAA326575E33C75388970D84482BD30161B51DAFA810066E93853016A7F8EB84FA33423DF23269B0C14C3BF70E5ADD6201359F70739DD273C43F7B83603B073FF93F338A1F09A2843D8C1F4DADBE0F49FBA0DA44D4C11629F5D2CB2CE2AE88424B37862E5BAE0049B3AF940411467CDD38EACBB3F54043EB69C53884FE6758A34781382E37ABE9DF01C19D54F4C34C5D7F976B551A66C00D296A91FCA2931E144F48A66771AFC72D3DC3F20FAB072B00A89058F577DC2750E24F5F5D227D703B2D7810955CD744BC9B04055B3DB2C70533A0D0E26B1FA65751937748A766613E98D81667BEE995B8D34A7CCC9DF7C7348647B3E0415D

d       = 633F9828BB461F26C24C79252A11C0DEC11E8F0DD321EF2A1B92FA8CC301EE3776A4D38C29E10514F8C9E4796D32A729D0615E6BC37845A08F2F699FEF9715214E9912FAAA061A70DB0B5D54FDDC9B886393526536C0D5101ADF9E45B22CA489DBEFCB180F9465ADC4E349E0264F97AAD58373BF43EC1AB4BC08D72B06F621B28AEC74D80CCF9BF7633FCE0C5647D15F7423767FA12CDB0552E8673D5F72283106DB7BA0003B0A68492B6826D4ABA08DB269767432E7923C9E957382F941DD3AD442BBC31D24EDEFD4BA7AD49E618B69CA23430121D0C99DB74A46906A60CD1022364D50EC25D68C71F6C84C40E00EBDE6BF879BB0B36826BC080EEDBA236E65

// c + d mod n:
res     = big_mod_add( $c, $d, $n )
if $res != 5F6529B9C0B2A0641E337C9D1427846012D6F98FEF89FEBE0F02E905DB437180F4CA8F74851D91BE88CBE24ED98F54B55AA660FBFC1BE3AF6824B4F816DE2EFC54FF45F2E5E9F2E91DE4F1AA1ABE8F86DCBDD1822843CB2AE3C1214B070DE378B2DBD56C0EE27967F8F45AA6802AF6B47590E3680DB5CC80C40610656D4EB866DEC629C087B735F57A922733CCABEE289BDAE583445ECDE70E1F17E17F3C47E1A0E46C63F021D5A77DEDDC8292E5F42599D42794CD20B388A5636BA35FE2CB6C5DC4BA43B03F0C380812C5C98E7D4F352E9A2C27A73D93B9BA665EE37440BE98D70FCA803BDAC0A406B222D340ABC2EAF3D32D13784F2BF399DC3DA73ED90ED1
    
?
    
pause
endif

// d - c mod n:
res     = big_mod_sub( $d, $c, $n )
if $res != 671A0697B5D99DE9666575AD3FFBFD5D6F66248BB6B9DF9628230C13AAC06AEDF87F17A3CEA4786B68C7E6A400D5F99E461C5BDB8AD4A791B63A1E47C84FFB464832E0026E2241F89831C8FFE0FAA789EA68D348453DDEF551FE1B405D4B659B0503C0C4104651F390D23919CC7438A1357604167A2268E8B40B9DF0A09D8AFE3712BFEF91E801F94BED74E4DFE3B4964C6C077BFDFAE82397B1B6993FA808806CD28ADC10543F291468F3CB16714CF5CAFEC55398AE70F097C77B6292A0EF094AC0BD428A0ACFA7A1622FDFAE45C79E65AC59DA9C63FF81B42E2E3D6080DB876D5CD0219C70EC74DD3B6DC541145A90D9ABE223E917A459DE33E034356DCDF9
    
?
    
pause
endif


// c * d mod n:
res     = big_mod_mul( $c, $d, $n )
if $res != 7431283183E453A86B561B6679C165873C622FDAD0F50A6BF64379AFE2E52359D4EC366F48059EF06CC626F00E2861E0E65F1E12AB10297AF14DF49F75D82FAC1DEAB2B04787E6716F12F2DD9D2697DF63F668638EBF0E2A9CA3A70702B90EEEE720F3579E71BBF7A4C668583DB5269769D4F5EF42DB5A59958E44C3F5F98AAAA8CA516BDD102AFCEAB0CD16E16B4D6339ED64B987C6A79813D9C14C5BA1DE06EA514FE95287D53BD804B92E6362E545990F0319929C11023814E6B6E99C4A5F4894D35012840996D5FA634A0B069A800A70C104E7E21EFF35EA87CC5A8D150B7B38773C6DFCAF329A2B27AD3513CDCC85F6A738486482FE9243FF1BFC08B716
    
?
    
pause
endif


// c ^ d mod n:
res     = big_mod_exp( $c, $d, $n )
if $res != 90819B56518680B50B8F555F38B4A36404A54BB3B6D84A14D4E3FB3BC879B6080E450B585E24009537F1B2C22EA4E589DD182B217C558E86F2A5C301BA4A1E3CFAF835FD647F5D4D35015B611BE101F403FA70297E7245539F52DEBB78DD0F685EE3EFE6A4C2ADD0E28AD7D16EFA390E19E8CD332498B0A35B202AC9CC542E53B80F065BA53A7B9EFD1362531F30C45855BEF7519D41736314A0DB783F5E6F6C48AC5FE3D5958D81F16EB95B8227BAA2CC52CF9480FB32DC9F819A1315C7392AEC4BF4ADF9DAE982388FC15D9F1961206DBB21AF9134B8A0403F01E29E35E24AC93DA875462373ADDB7D24EB3D662D4DDD0C3CB9C1CBDD957FA2EF67ED374253
    
?
    
pause
endif


e       = 00010001

p       = C5594D6F383F7D5B781B28773776065A506E1028474D5C7F153A577F107F237E117F7C2B4A560E39096D684E066D053F1B7F5A76383F107F2F6D6D3D3E7F5E78697F385D761B463B4375611B1F5F083F244E423F043D2A7E263E5F1F442B536F6C7D5C3E315B4D3E2864284F02753D773423116D71352D576E7D775F797D65AA

// modinv(e, p):
res     = big_mod_inv( $e, $p )
if $res != 40152488E609EFC9E0F168AD75ABF49A251DE84F3C0009F6164D9095E9246FC1032B93857729048B4EDD610E5D15CFAB5361825D7B1C375E2567721E7E09DC025BB77CF51461FCE7479B7901D6A9044384A588EB6F93F1156F93B74DAED426CEBABAE65627AECF214CFA61006EFAE50FAD3569F650D984B4AC633F7D183538EB
    
?
    
pause
endif

//////////////////////////////////////////
// 蒙哥马利模乘:
// c * d mod n:
res     = big_mod_mul_montgomery( $c, $d, $n )
if $res != 1E188AA1CF3A711A947461EA621CC7CC3FE1F5ED229753511C525623A28B2E058502355336336D8167835B74726A9CF5B7E26FD0CD318F17621F61D6642BD8AB76EB75BBFCC1A9023FC5B0148185476AAD34FBCC986BAC54EB35F2CB238507FEC266B4E49853A6CC860A0B5E111160E050E2F85DE38A1E0B2B315D51ABF644DF69FF5BA2607C3D4D2920B41BEC1F0E54469B78BD24CC6A0C01B086377D1A5D7E5A2F02B774DD69225A94D0158744EF8BE7DF66DB5D47AFF5C012E578FE6FF21AF42CFAD9724867E05546728F9E33EB7F6EC7C8FF7072F7318EB79D8821DC8EBD27436A8C771A46657C31377B6616EDD7A665653388C28E23FF3913F1D8B630A8
    
?
    
pause
endif

res     = prime_test( 00010001 )
if $res != 00
    
?
    
pause
endif

prime   = prime_gen( 40 )

res     = prime_test( $prime )
if $res != 00
    
?
    
pause
endif

a       = 11223397
b       = big_mod_inv_2_32( $a )
c       = mul( $a, $b )
c1      = big_mul( $a, $b )
if $c != 00000001
    
?
    
pause
endif