openssl prime 检验与生成质数
openssl
是一个开源工具包,主要用于网络通信工作。noi linux 2.0 已经安装。我们不难发现有个工具叫 prime
。
noi@noi-HP-288-Pro-G3-MT:~$ openssl help
Standard commands
asn1parse ca ciphers cms
crl crl2pkcs7 dgst dhparam
dsa dsaparam ec ecparam
enc engine errstr gendsa
genpkey genrsa help list
nseq ocsp passwd pkcs12
pkcs7 pkcs8 pkey pkeyparam
pkeyutl prime rand rehash
req rsa rsautl s_client
s_server s_time sess_id smime
speed spkac srp storeutl
ts verify version x509
Message Digest commands (see the `dgst' command for more details)
blake2b512 blake2s256 gost md4
md5 rmd160 sha1 sha224
sha256 sha3-224 sha3-256 sha3-384
sha3-512 sha384 sha512 sha512-224
sha512-256 shake128 shake256 sm3
Cipher commands (see the `enc' command for more details)
aes-128-cbc aes-128-ecb aes-192-cbc aes-192-ecb
aes-256-cbc aes-256-ecb aria-128-cbc aria-128-cfb
aria-128-cfb1 aria-128-cfb8 aria-128-ctr aria-128-ecb
aria-128-ofb aria-192-cbc aria-192-cfb aria-192-cfb1
aria-192-cfb8 aria-192-ctr aria-192-ecb aria-192-ofb
aria-256-cbc aria-256-cfb aria-256-cfb1 aria-256-cfb8
aria-256-ctr aria-256-ecb aria-256-ofb base64
bf bf-cbc bf-cfb bf-ecb
bf-ofb camellia-128-cbc camellia-128-ecb camellia-192-cbc
camellia-192-ecb camellia-256-cbc camellia-256-ecb cast
cast-cbc cast5-cbc cast5-cfb cast5-ecb
cast5-ofb des des-cbc des-cfb
des-ecb des-ede des-ede-cbc des-ede-cfb
des-ede-ofb des-ede3 des-ede3-cbc des-ede3-cfb
des-ede3-ofb des-ofb des3 desx
rc2 rc2-40-cbc rc2-64-cbc rc2-cbc
rc2-cfb rc2-ecb rc2-ofb rc4
rc4-40 seed seed-cbc seed-cfb
seed-ecb seed-ofb sm4-cbc sm4-cfb
sm4-ctr sm4-ecb sm4-ofb
考虑查看 openssl prime
的使用帮助。
Usage: prime [options] [number...]
number Number to check for primality
-help Display this summary
-hex Hex output
-generate Generate a prime
-bits +int Size of number in bits
-safe When used with -generate, generate a safe prime
-checks +int Number of checks
也就是 openssl prime
加一个数字可以判断是否为质数。openssl prime -generate -bits 位数
生成指定二进制位数的质数。checks
参数是一次指定多个质数进行检验。safe
参数生成 safe prime,一个 safe prime \(p\) 满足不仅 \(p\) 为奇质数而且 \((p-1)/2\) 为质数。
下面是一个实例:
noi@noi-HP-288-Pro-G3-MT:~$ openssl prime 998244353
3B800001 (998244353) is prime
noi@noi-HP-288-Pro-G3-MT:~$ openssl prime -generate -bits 32
3575265439
noi@noi-HP-288-Pro-G3-MT:~$ openssl prime -generate -bits 32 -safe
3563108279
noi@noi-HP-288-Pro-G3-MT:~$ openssl prime -checks 2 3575265439 3563108279
D51A389F (3575265439) is prime
D460B7B7 (3563108279) is prime
第二届你要魔怔杯鲜花大赛!!!采用话题作文的形式,题目如下。
素性测试
选择一个奇素数,写一篇文章。这个数应该是特殊的,也就是说如果想用别的数来写(这个数不限于奇素数)且仅进行 \(O(1)\) 的修改,就难以达到相近或更好的效果。
不难发现这正是 openssl prime
所擅长的(指素性测试)。因为有要求:
为了进行素性测试,要求这个素数的二进制位数在5000以内。
考虑走极端,生成一个二进制位数 \(5000\) 的质数并令其检验:
noi@noi-HP-288-Pro-G3-MT:~$ time openssl prime -generate -bits 5000
131147847544613706457463015983828576917575414488162371776473706596622180204560635248405080059983596975029469924038688599232632447116688119205964540254692662421360886642509141914533364535690051205086297510680265017472345759386327735558495166999642629695568526149451073622491069901730844652535414968736331901445118997433571932779600181019487575986739512078422091065700539091787662631701111832672495950877392443065496555247155557249415775814104847709601623583745628971545805892129769868926139612518563171371488033301360863132348460266653267782295236650243293326996109701932161161985401828429022221358428657394465941841170511293320430746075539311384958680286829502518710496083059887639689641851158639052213388516731666370170952439756835087121487286256275558243157194103371540405425939482140348004270297956053595770105451049356052446678707639689748756473923024863695261827375967389782615208522342798335556111868589362516902365278966259074890393858412496122061404288618784138478244260211709051707280922232743560865522150476901311480167209871743722579374277218994172261728424090131941995873615162392219269127427881199910262764917834783179201470330818874908311425382551232494935855851601276117394439339321939529327286956553516763055663331481734631061653134401502476122425827286884220060952651454255103959177166230493372226064819781351063811154452313722878058149385871739429700522901606205308751493870232050241813444672674932714860208306105986861799032780571813624076490332459764703880563558326759276824394811925413
real 0m19.668s
user 0m19.629s
sys 0m0.004s
noi@noi-HP-288-Pro-G3-MT:~$ time openssl prime 131147847544613706457463015983828576917575414488162371776473706596622180204560635248405080059983596975029469924038688599232632447116688119205964540254692662421360886642509141914533364535690051205086297510680265017472345759386327735558495166999642629695568526149451073622491069901730844652535414968736331901445118997433571932779600181019487575986739512078422091065700539091787662631701111832672495950877392443065496555247155557249415775814104847709601623583745628971545805892129769868926139612518563171371488033301360863132348460266653267782295236650243293326996109701932161161985401828429022221358428657394465941841170511293320430746075539311384958680286829502518710496083059887639689641851158639052213388516731666370170952439756835087121487286256275558243157194103371540405425939482140348004270297956053595770105451049356052446678707639689748756473923024863695261827375967389782615208522342798335556111868589362516902365278966259074890393858412496122061404288618784138478244260211709051707280922232743560865522150476901311480167209871743722579374277218994172261728424090131941995873615162392219269127427881199910262764917834783179201470330818874908311425382551232494935855851601276117394439339321939529327286956553516763055663331481734631061653134401502476122425827286884220060952651454255103959177166230493372226064819781351063811154452313722878058149385871739429700522901606205308751493870232050241813444672674932714860208306105986861799032780571813624076490332459764703880563558326759276824394811925413
EDB24EBE3CDA52434AE03F79CADE882DCC3135B9849AFF5C22EEB1BAE31535B694B1E338EB4D4E53ED63CF6DBD7B8724AD4DAEB9EC25EE713CA6999CA23A3D9850A12D0F22F7E4049D1E4C6D4D68F264388A548BAAA3B17957B357117CB10C3573DC4157E61CA4B301810B84FF8B2758E2827271B5B35168025055B18DC2359212CC6459879ADD6EE68617374B88DA01CC5A110FBC979BF0EC213A5EB0D21049ABE02AE92B08AD9244981BC118EA0F25832FCAC371EDBCCC2765E3175F9721514D5A69371CDE591B07B8AD8DFAB0D631610DDF405D55DAC7D1523C9B97CB591D07621AE1C2ED6FCB9BEF8EA3D20FF9FE8360D197AD49E2B346F981B97297F22423951C0934F449833BB12EC4BC8F3DAEA9BD88B865D1636D12E44BCD9E98CD5FFB54673454350EC08836C5559978100E1D80B1A784C097968E490DCA99F4C40F4679D65CC9BF365E878D313E3B2556F52690508D7D8251125DB22DC8CF6E9157335EC47D27A2F0FFF434EC7CECC5A6907EA7E6CD04E13150E32D4F0DB237907B97515D26359A06064A76C9555955B3B13D3F2CA3DFDC77836ECC502E9C20A302F55C75FFA0513B044C794FF2E437CB6DE88325EF44EBA6134921C747079C3575DBFF1D8292704D23B0EC95B4F333FF604CCBFA97C6357D4239081A0BEE73259D56E2B0984CEA3679472F5740ACCDE3B486CDE8170F4EDD2310C519907BAE98B4F850BB28C3C867C32C3DA26226AAFF5736A6B26EB8F76C1E640070A7BC4CED44DA8E5CAB082D61121BC196677F5DD1BA29FE375AA04C6180400501DB73F5162E5A4AA5C45E6258D1A52127DF4E2DA66DE75030BB4E5E042330866192B3C847C15DD456FA0B755F1BE42866B7C9F52963A5 (131147847544613706457463015983828576917575414488162371776473706596622180204560635248405080059983596975029469924038688599232632447116688119205964540254692662421360886642509141914533364535690051205086297510680265017472345759386327735558495166999642629695568526149451073622491069901730844652535414968736331901445118997433571932779600181019487575986739512078422091065700539091787662631701111832672495950877392443065496555247155557249415775814104847709601623583745628971545805892129769868926139612518563171371488033301360863132348460266653267782295236650243293326996109701932161161985401828429022221358428657394465941841170511293320430746075539311384958680286829502518710496083059887639689641851158639052213388516731666370170952439756835087121487286256275558243157194103371540405425939482140348004270297956053595770105451049356052446678707639689748756473923024863695261827375967389782615208522342798335556111868589362516902365278966259074890393858412496122061404288618784138478244260211709051707280922232743560865522150476901311480167209871743722579374277218994172261728424090131941995873615162392219269127427881199910262764917834783179201470330818874908311425382551232494935855851601276117394439339321939529327286956553516763055663331481734631061653134401502476122425827286884220060952651454255103959177166230493372226064819781351063811154452313722878058149385871739429700522901606205308751493870232050241813444672674932714860208306105986861799032780571813624076490332459764703880563558326759276824394811925413) is prime
real 0m1.143s
user 0m1.139s
sys 0m0.004s
发现效率很高。生成质数 131147847544613706457463015983828576917575414488162371776473706596622180204560635248405080059983596975029469924038688599232632447116688119205964540254692662421360886642509141914533364535690051205086297510680265017472345759386327735558495166999642629695568526149451073622491069901730844652535414968736331901445118997433571932779600181019487575986739512078422091065700539091787662631701111832672495950877392443065496555247155557249415775814104847709601623583745628971545805892129769868926139612518563171371488033301360863132348460266653267782295236650243293326996109701932161161985401828429022221358428657394465941841170511293320430746075539311384958680286829502518710496083059887639689641851158639052213388516731666370170952439756835087121487286256275558243157194103371540405425939482140348004270297956053595770105451049356052446678707639689748756473923024863695261827375967389782615208522342798335556111868589362516902365278966259074890393858412496122061404288618784138478244260211709051707280922232743560865522150476901311480167209871743722579374277218994172261728424090131941995873615162392219269127427881199910262764917834783179201470330818874908311425382551232494935855851601276117394439339321939529327286956553516763055663331481734631061653134401502476122425827286884220060952651454255103959177166230493372226064819781351063811154452313722878058149385871739429700522901606205308751493870232050241813444672674932714860208306105986861799032780571813624076490332459764703880563558326759276824394811925413 即十六进制 EDB24EBE3CDA52434AE03F79CADE882DCC3135B9849AFF5C22EEB1BAE31535B694B1E338EB4D4E53ED63CF6DBD7B8724AD4DAEB9EC25EE713CA6999CA23A3D9850A12D0F22F7E4049D1E4C6D4D68F264388A548BAAA3B17957B357117CB10C3573DC4157E61CA4B301810B84FF8B2758E2827271B5B35168025055B18DC2359212CC6459879ADD6EE68617374B88DA01CC5A110FBC979BF0EC213A5EB0D21049ABE02AE92B08AD9244981BC118EA0F25832FCAC371EDBCCC2765E3175F9721514D5A69371CDE591B07B8AD8DFAB0D631610DDF405D55DAC7D1523C9B97CB591D07621AE1C2ED6FCB9BEF8EA3D20FF9FE8360D197AD49E2B346F981B97297F22423951C0934F449833BB12EC4BC8F3DAEA9BD88B865D1636D12E44BCD9E98CD5FFB54673454350EC08836C5559978100E1D80B1A784C097968E490DCA99F4C40F4679D65CC9BF365E878D313E3B2556F52690508D7D8251125DB22DC8CF6E9157335EC47D27A2F0FFF434EC7CECC5A6907EA7E6CD04E13150E32D4F0DB237907B97515D26359A06064A76C9555955B3B13D3F2CA3DFDC77836ECC502E9C20A302F55C75FFA0513B044C794FF2E437CB6DE88325EF44EBA6134921C747079C3575DBFF1D8292704D23B0EC95B4F333FF604CCBFA97C6357D4239081A0BEE73259D56E2B0984CEA3679472F5740ACCDE3B486CDE8170F4EDD2310C519907BAE98B4F850BB28C3C867C32C3DA26226AAFF5736A6B26EB8F76C1E640070A7BC4CED44DA8E5CAB082D61121BC196677F5DD1BA29FE375AA04C6180400501DB73F5162E5A4AA5C45E6258D1A52127DF4E2DA66DE75030BB4E5E042330866192B3C847C15DD456FA0B755F1BE42866B7C9F52963A5 仅运行 19 秒,检验仅花费 1 秒。
可应用 openssl prime
至 OI 中,随机生成指定级别的哈希模数与底数,将推动 OI 事业的发展。
本文来自博客园,作者:caijianhong,转载请注明原文链接:https://www.cnblogs.com/caijianhong/p/18288891