Update docs with latest information

This commit is contained in:
Zach Dziura 2016-05-10 15:15:32 -04:00
parent 45bffa358a
commit b9a37705ff
18 changed files with 254 additions and 140 deletions

View file

@ -1,5 +1,5 @@
(function() {var implementors = {};
implementors['libc'] = [];implementors['ramp'] = ["impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/fmt/trait.Binary.html' title='core::fmt::Binary'>Binary</a> for <a class='struct' href='ramp/int/struct.Int.html' title='ramp::int::Int'>Int</a>",];implementors['pumpkin'] = ["impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/fmt/trait.Binary.html' title='core::fmt::Binary'>Binary</a> for <a class='struct' href='pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a>",];
implementors['pumpkin'] = ["impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/fmt/trait.Binary.html' title='core::fmt::Binary'>Binary</a> for <a class='struct' href='pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a>",];
if (window.register_implementors) {
window.register_implementors(implementors);

View file

@ -1,5 +1,5 @@
(function() {var implementors = {};
implementors['libc'] = [];implementors['ramp'] = ["impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html' title='core::fmt::Debug'>Debug</a> for <a class='struct' href='ramp/ll/limb/struct.Limb.html' title='ramp::ll::limb::Limb'>Limb</a>","impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html' title='core::fmt::Debug'>Debug</a> for <a class='struct' href='ramp/ll/limb_ptr/struct.Limbs.html' title='ramp::ll::limb_ptr::Limbs'>Limbs</a>","impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html' title='core::fmt::Debug'>Debug</a> for <a class='struct' href='ramp/int/struct.Int.html' title='ramp::int::Int'>Int</a>","impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html' title='core::fmt::Debug'>Debug</a> for <a class='struct' href='ramp/int/struct.ParseIntError.html' title='ramp::int::ParseIntError'>ParseIntError</a>",];implementors['pumpkin'] = ["impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html' title='core::fmt::Debug'>Debug</a> for <a class='struct' href='pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a>",];
implementors['pumpkin'] = ["impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html' title='core::fmt::Debug'>Debug</a> for <a class='struct' href='pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a>",];
if (window.register_implementors) {
window.register_implementors(implementors);

View file

@ -1,5 +1,5 @@
(function() {var implementors = {};
implementors['libc'] = [];implementors['ramp'] = ["impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/fmt/trait.Display.html' title='core::fmt::Display'>Display</a> for <a class='struct' href='ramp/ll/limb/struct.Limb.html' title='ramp::ll::limb::Limb'>Limb</a>","impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/fmt/trait.Display.html' title='core::fmt::Display'>Display</a> for <a class='struct' href='ramp/int/struct.Int.html' title='ramp::int::Int'>Int</a>","impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/fmt/trait.Display.html' title='core::fmt::Display'>Display</a> for <a class='struct' href='ramp/int/struct.ParseIntError.html' title='ramp::int::ParseIntError'>ParseIntError</a>",];implementors['pumpkin'] = ["impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/fmt/trait.Display.html' title='core::fmt::Display'>Display</a> for <a class='struct' href='pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a>",];
implementors['pumpkin'] = ["impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/fmt/trait.Display.html' title='core::fmt::Display'>Display</a> for <a class='struct' href='pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a>",];
if (window.register_implementors) {
window.register_implementors(implementors);

View file

@ -1,5 +1,5 @@
(function() {var implementors = {};
implementors['libc'] = [];implementors['ramp'] = ["impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/fmt/trait.LowerHex.html' title='core::fmt::LowerHex'>LowerHex</a> for <a class='struct' href='ramp/int/struct.Int.html' title='ramp::int::Int'>Int</a>",];implementors['pumpkin'] = ["impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/fmt/trait.LowerHex.html' title='core::fmt::LowerHex'>LowerHex</a> for <a class='struct' href='pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a>",];
implementors['pumpkin'] = ["impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/fmt/trait.LowerHex.html' title='core::fmt::LowerHex'>LowerHex</a> for <a class='struct' href='pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a>",];
if (window.register_implementors) {
window.register_implementors(implementors);

View file

@ -1,5 +1,5 @@
(function() {var implementors = {};
implementors['libc'] = [];implementors['ramp'] = ["impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/fmt/trait.Octal.html' title='core::fmt::Octal'>Octal</a> for <a class='struct' href='ramp/int/struct.Int.html' title='ramp::int::Int'>Int</a>",];implementors['pumpkin'] = ["impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/fmt/trait.Octal.html' title='core::fmt::Octal'>Octal</a> for <a class='struct' href='pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a>",];
implementors['pumpkin'] = ["impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/fmt/trait.Octal.html' title='core::fmt::Octal'>Octal</a> for <a class='struct' href='pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a>",];
if (window.register_implementors) {
window.register_implementors(implementors);

View file

@ -1,5 +1,5 @@
(function() {var implementors = {};
implementors['libc'] = [];implementors['ramp'] = ["impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/fmt/trait.UpperHex.html' title='core::fmt::UpperHex'>UpperHex</a> for <a class='struct' href='ramp/int/struct.Int.html' title='ramp::int::Int'>Int</a>",];implementors['pumpkin'] = ["impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/fmt/trait.UpperHex.html' title='core::fmt::UpperHex'>UpperHex</a> for <a class='struct' href='pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a>",];
implementors['pumpkin'] = ["impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/fmt/trait.UpperHex.html' title='core::fmt::UpperHex'>UpperHex</a> for <a class='struct' href='pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a>",];
if (window.register_implementors) {
window.register_implementors(implementors);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -56,7 +56,7 @@
<code>Prime::from_rng()</code> method.</p>
<p>Note: the <code>bit_length</code> MUST be at least 512-bits.</p>
</div><h4 id='method.from_rng' class='method'><code>fn <a href='#method.from_rng' class='fnname'>from_rng</a>(bit_length: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.usize.html'>usize</a>, rngesus: &amp;mut <a class='struct' href='../rand/os/struct.OsRng.html' title='rand::os::OsRng'>OsRng</a>) -&gt; <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h4>
</div><h4 id='method.from_rng' class='method'><code>fn <a href='#method.from_rng' class='fnname'>from_rng</a>(bit_length: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.usize.html'>usize</a>, rngesus: &amp;mut <a class='struct' href='https://doc.rust-lang.org/rand/rand/os/struct.OsRng.html' title='rand::os::OsRng'>OsRng</a>) -&gt; <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h4>
<div class='docblock'><p>Constructs a new <code>Prime</code> with the size of <code>bit_length</code> bits, sourced
from an already-created <code>OsRng</code>. Not that you can <strong>ONLY</strong> use an
<code>OsRng</code>, as it uses the operating system&#39;s secure source of entropy.</p>
@ -68,36 +68,36 @@ from an already-created <code>OsRng</code>. Not that you can <strong>ONLY</stron
</div><h3 class='impl'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/fmt/trait.UpperHex.html' title='core::fmt::UpperHex'>UpperHex</a> for <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h3><div class='impl-items'><h4 id='method.fmt-5' class='method'><code>fn <a href='https://doc.rust-lang.org/nightly/core/fmt/trait.UpperHex.html#tymethod.fmt' class='fnname'>fmt</a>(&amp;self, fmt: &amp;mut <a class='struct' href='https://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html' title='core::fmt::Formatter'>Formatter</a>) -&gt; <a class='type' href='https://doc.rust-lang.org/nightly/core/fmt/type.Result.html' title='core::fmt::Result'>Result</a></code></h4>
</div><h3 class='impl'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.Add.html' title='core::ops::Add'>Add</a>&lt;<a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a>&gt; for <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h3><div class='impl-items'><h4 id='associatedtype.Output' class='type'><code>type <a href='https://doc.rust-lang.org/nightly/core/ops/trait.Add.html#associatedtype.Output' class='type'>Output</a> = <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h4>
<h4 id='method.add' class='method'><code>fn <a href='https://doc.rust-lang.org/nightly/core/ops/trait.Add.html#tymethod.add' class='fnname'>add</a>(self, rhs: Self) -&gt; <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h4>
</div><h3 class='impl'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.Add.html' title='core::ops::Add'>Add</a>&lt;<a class='struct' href='../ramp/int/struct.Int.html' title='ramp::int::Int'>Int</a>&gt; for <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h3><div class='impl-items'><h4 id='associatedtype.Output-1' class='type'><code>type <a href='https://doc.rust-lang.org/nightly/core/ops/trait.Add.html#associatedtype.Output' class='type'>Output</a> = <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h4>
<h4 id='method.add-1' class='method'><code>fn <a href='https://doc.rust-lang.org/nightly/core/ops/trait.Add.html#tymethod.add' class='fnname'>add</a>(self, rhs: <a class='struct' href='../ramp/int/struct.Int.html' title='ramp::int::Int'>Int</a>) -&gt; <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h4>
</div><h3 class='impl'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.Add.html' title='core::ops::Add'>Add</a>&lt;Int&gt; for <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h3><div class='impl-items'><h4 id='associatedtype.Output-1' class='type'><code>type <a href='https://doc.rust-lang.org/nightly/core/ops/trait.Add.html#associatedtype.Output' class='type'>Output</a> = <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h4>
<h4 id='method.add-1' class='method'><code>fn <a href='https://doc.rust-lang.org/nightly/core/ops/trait.Add.html#tymethod.add' class='fnname'>add</a>(self, rhs: Int) -&gt; <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h4>
</div><h3 class='impl'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.Sub.html' title='core::ops::Sub'>Sub</a>&lt;<a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a>&gt; for <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h3><div class='impl-items'><h4 id='associatedtype.Output-2' class='type'><code>type <a href='https://doc.rust-lang.org/nightly/core/ops/trait.Sub.html#associatedtype.Output' class='type'>Output</a> = <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h4>
<h4 id='method.sub' class='method'><code>fn <a href='https://doc.rust-lang.org/nightly/core/ops/trait.Sub.html#tymethod.sub' class='fnname'>sub</a>(self, rhs: Self) -&gt; <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h4>
</div><h3 class='impl'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.Sub.html' title='core::ops::Sub'>Sub</a>&lt;<a class='struct' href='../ramp/int/struct.Int.html' title='ramp::int::Int'>Int</a>&gt; for <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h3><div class='impl-items'><h4 id='associatedtype.Output-3' class='type'><code>type <a href='https://doc.rust-lang.org/nightly/core/ops/trait.Sub.html#associatedtype.Output' class='type'>Output</a> = <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h4>
<h4 id='method.sub-1' class='method'><code>fn <a href='https://doc.rust-lang.org/nightly/core/ops/trait.Sub.html#tymethod.sub' class='fnname'>sub</a>(self, rhs: <a class='struct' href='../ramp/int/struct.Int.html' title='ramp::int::Int'>Int</a>) -&gt; <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h4>
</div><h3 class='impl'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.Sub.html' title='core::ops::Sub'>Sub</a>&lt;Int&gt; for <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h3><div class='impl-items'><h4 id='associatedtype.Output-3' class='type'><code>type <a href='https://doc.rust-lang.org/nightly/core/ops/trait.Sub.html#associatedtype.Output' class='type'>Output</a> = <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h4>
<h4 id='method.sub-1' class='method'><code>fn <a href='https://doc.rust-lang.org/nightly/core/ops/trait.Sub.html#tymethod.sub' class='fnname'>sub</a>(self, rhs: Int) -&gt; <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h4>
</div><h3 class='impl'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.Mul.html' title='core::ops::Mul'>Mul</a>&lt;<a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a>&gt; for <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h3><div class='impl-items'><h4 id='associatedtype.Output-4' class='type'><code>type <a href='https://doc.rust-lang.org/nightly/core/ops/trait.Mul.html#associatedtype.Output' class='type'>Output</a> = <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h4>
<h4 id='method.mul' class='method'><code>fn <a href='https://doc.rust-lang.org/nightly/core/ops/trait.Mul.html#tymethod.mul' class='fnname'>mul</a>(self, rhs: Self) -&gt; <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h4>
</div><h3 class='impl'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.Mul.html' title='core::ops::Mul'>Mul</a>&lt;<a class='struct' href='../ramp/int/struct.Int.html' title='ramp::int::Int'>Int</a>&gt; for <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h3><div class='impl-items'><h4 id='associatedtype.Output-5' class='type'><code>type <a href='https://doc.rust-lang.org/nightly/core/ops/trait.Mul.html#associatedtype.Output' class='type'>Output</a> = <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h4>
<h4 id='method.mul-1' class='method'><code>fn <a href='https://doc.rust-lang.org/nightly/core/ops/trait.Mul.html#tymethod.mul' class='fnname'>mul</a>(self, rhs: <a class='struct' href='../ramp/int/struct.Int.html' title='ramp::int::Int'>Int</a>) -&gt; <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h4>
</div><h3 class='impl'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.Mul.html' title='core::ops::Mul'>Mul</a>&lt;Int&gt; for <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h3><div class='impl-items'><h4 id='associatedtype.Output-5' class='type'><code>type <a href='https://doc.rust-lang.org/nightly/core/ops/trait.Mul.html#associatedtype.Output' class='type'>Output</a> = <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h4>
<h4 id='method.mul-1' class='method'><code>fn <a href='https://doc.rust-lang.org/nightly/core/ops/trait.Mul.html#tymethod.mul' class='fnname'>mul</a>(self, rhs: Int) -&gt; <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h4>
</div><h3 class='impl'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.Div.html' title='core::ops::Div'>Div</a>&lt;<a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a>&gt; for <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h3><div class='impl-items'><h4 id='associatedtype.Output-6' class='type'><code>type <a href='https://doc.rust-lang.org/nightly/core/ops/trait.Div.html#associatedtype.Output' class='type'>Output</a> = <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h4>
<h4 id='method.div' class='method'><code>fn <a href='https://doc.rust-lang.org/nightly/core/ops/trait.Div.html#tymethod.div' class='fnname'>div</a>(self, rhs: Self) -&gt; <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h4>
</div><h3 class='impl'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.Div.html' title='core::ops::Div'>Div</a>&lt;<a class='struct' href='../ramp/int/struct.Int.html' title='ramp::int::Int'>Int</a>&gt; for <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h3><div class='impl-items'><h4 id='associatedtype.Output-7' class='type'><code>type <a href='https://doc.rust-lang.org/nightly/core/ops/trait.Div.html#associatedtype.Output' class='type'>Output</a> = <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h4>
<h4 id='method.div-1' class='method'><code>fn <a href='https://doc.rust-lang.org/nightly/core/ops/trait.Div.html#tymethod.div' class='fnname'>div</a>(self, rhs: <a class='struct' href='../ramp/int/struct.Int.html' title='ramp::int::Int'>Int</a>) -&gt; <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h4>
</div><h3 class='impl'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.Div.html' title='core::ops::Div'>Div</a>&lt;Int&gt; for <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h3><div class='impl-items'><h4 id='associatedtype.Output-7' class='type'><code>type <a href='https://doc.rust-lang.org/nightly/core/ops/trait.Div.html#associatedtype.Output' class='type'>Output</a> = <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h4>
<h4 id='method.div-1' class='method'><code>fn <a href='https://doc.rust-lang.org/nightly/core/ops/trait.Div.html#tymethod.div' class='fnname'>div</a>(self, rhs: Int) -&gt; <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h4>
</div><h3 class='impl'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.Rem.html' title='core::ops::Rem'>Rem</a>&lt;<a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a>&gt; for <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h3><div class='impl-items'><h4 id='associatedtype.Output-8' class='type'><code>type <a href='https://doc.rust-lang.org/nightly/core/ops/trait.Rem.html#associatedtype.Output' class='type'>Output</a> = <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h4>
<h4 id='method.rem' class='method'><code>fn <a href='https://doc.rust-lang.org/nightly/core/ops/trait.Rem.html#tymethod.rem' class='fnname'>rem</a>(self, rhs: Self) -&gt; <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h4>
</div><h3 class='impl'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.Rem.html' title='core::ops::Rem'>Rem</a>&lt;<a class='struct' href='../ramp/int/struct.Int.html' title='ramp::int::Int'>Int</a>&gt; for <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h3><div class='impl-items'><h4 id='associatedtype.Output-9' class='type'><code>type <a href='https://doc.rust-lang.org/nightly/core/ops/trait.Rem.html#associatedtype.Output' class='type'>Output</a> = <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h4>
<h4 id='method.rem-1' class='method'><code>fn <a href='https://doc.rust-lang.org/nightly/core/ops/trait.Rem.html#tymethod.rem' class='fnname'>rem</a>(self, rhs: <a class='struct' href='../ramp/int/struct.Int.html' title='ramp::int::Int'>Int</a>) -&gt; <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h4>
</div><h3 class='impl'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.Rem.html' title='core::ops::Rem'>Rem</a>&lt;Int&gt; for <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h3><div class='impl-items'><h4 id='associatedtype.Output-9' class='type'><code>type <a href='https://doc.rust-lang.org/nightly/core/ops/trait.Rem.html#associatedtype.Output' class='type'>Output</a> = <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h4>
<h4 id='method.rem-1' class='method'><code>fn <a href='https://doc.rust-lang.org/nightly/core/ops/trait.Rem.html#tymethod.rem' class='fnname'>rem</a>(self, rhs: Int) -&gt; <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h4>
</div><h3 class='impl'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.BitAnd.html' title='core::ops::BitAnd'>BitAnd</a>&lt;<a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a>&gt; for <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h3><div class='impl-items'><h4 id='associatedtype.Output-10' class='type'><code>type <a href='https://doc.rust-lang.org/nightly/core/ops/trait.BitAnd.html#associatedtype.Output' class='type'>Output</a> = <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h4>
<h4 id='method.bitand' class='method'><code>fn <a href='https://doc.rust-lang.org/nightly/core/ops/trait.BitAnd.html#tymethod.bitand' class='fnname'>bitand</a>(self, rhs: Self) -&gt; <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h4>
</div><h3 class='impl'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.BitAnd.html' title='core::ops::BitAnd'>BitAnd</a>&lt;<a class='struct' href='../ramp/int/struct.Int.html' title='ramp::int::Int'>Int</a>&gt; for <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h3><div class='impl-items'><h4 id='associatedtype.Output-11' class='type'><code>type <a href='https://doc.rust-lang.org/nightly/core/ops/trait.BitAnd.html#associatedtype.Output' class='type'>Output</a> = <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h4>
<h4 id='method.bitand-1' class='method'><code>fn <a href='https://doc.rust-lang.org/nightly/core/ops/trait.BitAnd.html#tymethod.bitand' class='fnname'>bitand</a>(self, rhs: <a class='struct' href='../ramp/int/struct.Int.html' title='ramp::int::Int'>Int</a>) -&gt; <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h4>
</div><h3 class='impl'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.BitAnd.html' title='core::ops::BitAnd'>BitAnd</a>&lt;Int&gt; for <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h3><div class='impl-items'><h4 id='associatedtype.Output-11' class='type'><code>type <a href='https://doc.rust-lang.org/nightly/core/ops/trait.BitAnd.html#associatedtype.Output' class='type'>Output</a> = <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h4>
<h4 id='method.bitand-1' class='method'><code>fn <a href='https://doc.rust-lang.org/nightly/core/ops/trait.BitAnd.html#tymethod.bitand' class='fnname'>bitand</a>(self, rhs: Int) -&gt; <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h4>
</div><h3 class='impl'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.BitOr.html' title='core::ops::BitOr'>BitOr</a>&lt;<a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a>&gt; for <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h3><div class='impl-items'><h4 id='associatedtype.Output-12' class='type'><code>type <a href='https://doc.rust-lang.org/nightly/core/ops/trait.BitOr.html#associatedtype.Output' class='type'>Output</a> = <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h4>
<h4 id='method.bitor' class='method'><code>fn <a href='https://doc.rust-lang.org/nightly/core/ops/trait.BitOr.html#tymethod.bitor' class='fnname'>bitor</a>(self, rhs: Self) -&gt; <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h4>
</div><h3 class='impl'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.BitOr.html' title='core::ops::BitOr'>BitOr</a>&lt;<a class='struct' href='../ramp/int/struct.Int.html' title='ramp::int::Int'>Int</a>&gt; for <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h3><div class='impl-items'><h4 id='associatedtype.Output-13' class='type'><code>type <a href='https://doc.rust-lang.org/nightly/core/ops/trait.BitOr.html#associatedtype.Output' class='type'>Output</a> = <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h4>
<h4 id='method.bitor-1' class='method'><code>fn <a href='https://doc.rust-lang.org/nightly/core/ops/trait.BitOr.html#tymethod.bitor' class='fnname'>bitor</a>(self, rhs: <a class='struct' href='../ramp/int/struct.Int.html' title='ramp::int::Int'>Int</a>) -&gt; <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h4>
</div><h3 class='impl'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.BitOr.html' title='core::ops::BitOr'>BitOr</a>&lt;Int&gt; for <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h3><div class='impl-items'><h4 id='associatedtype.Output-13' class='type'><code>type <a href='https://doc.rust-lang.org/nightly/core/ops/trait.BitOr.html#associatedtype.Output' class='type'>Output</a> = <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h4>
<h4 id='method.bitor-1' class='method'><code>fn <a href='https://doc.rust-lang.org/nightly/core/ops/trait.BitOr.html#tymethod.bitor' class='fnname'>bitor</a>(self, rhs: Int) -&gt; <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h4>
</div><h3 class='impl'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.BitXor.html' title='core::ops::BitXor'>BitXor</a>&lt;<a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a>&gt; for <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h3><div class='impl-items'><h4 id='associatedtype.Output-14' class='type'><code>type <a href='https://doc.rust-lang.org/nightly/core/ops/trait.BitXor.html#associatedtype.Output' class='type'>Output</a> = <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h4>
<h4 id='method.bitxor' class='method'><code>fn <a href='https://doc.rust-lang.org/nightly/core/ops/trait.BitXor.html#tymethod.bitxor' class='fnname'>bitxor</a>(self, rhs: Self) -&gt; <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h4>
</div><h3 class='impl'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.BitXor.html' title='core::ops::BitXor'>BitXor</a>&lt;<a class='struct' href='../ramp/int/struct.Int.html' title='ramp::int::Int'>Int</a>&gt; for <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h3><div class='impl-items'><h4 id='associatedtype.Output-15' class='type'><code>type <a href='https://doc.rust-lang.org/nightly/core/ops/trait.BitXor.html#associatedtype.Output' class='type'>Output</a> = <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h4>
<h4 id='method.bitxor-1' class='method'><code>fn <a href='https://doc.rust-lang.org/nightly/core/ops/trait.BitXor.html#tymethod.bitxor' class='fnname'>bitxor</a>(self, rhs: <a class='struct' href='../ramp/int/struct.Int.html' title='ramp::int::Int'>Int</a>) -&gt; <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h4>
</div><h3 class='impl'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.BitXor.html' title='core::ops::BitXor'>BitXor</a>&lt;Int&gt; for <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h3><div class='impl-items'><h4 id='associatedtype.Output-15' class='type'><code>type <a href='https://doc.rust-lang.org/nightly/core/ops/trait.BitXor.html#associatedtype.Output' class='type'>Output</a> = <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h4>
<h4 id='method.bitxor-1' class='method'><code>fn <a href='https://doc.rust-lang.org/nightly/core/ops/trait.BitXor.html#tymethod.bitxor' class='fnname'>bitxor</a>(self, rhs: Int) -&gt; <a class='struct' href='../pumpkin/struct.Prime.html' title='pumpkin::Prime'>Prime</a></code></h4>
</div></section>
<section id='search' class="content hidden"></section>

File diff suppressed because one or more lines are too long

View file

@ -121,7 +121,11 @@
<span id="77">77</span>
</pre><pre class='rust '>
<span class='attribute'>#<span class='op'>!</span>[<span class='ident'>feature</span>(<span class='ident'>test</span>)]</span>
<span class='comment'>//#![deny(missing_docs)]</span>
<span class='attribute'>#<span class='op'>!</span>[<span class='ident'>deny</span>(<span class='ident'>missing_docs</span>, <span class='ident'>missing_debug_implementations</span>,
<span class='ident'>missing_copy_implementations</span>, <span class='ident'>trivial_casts</span>, <span class='ident'>trivial_numeric_casts</span>,
<span class='ident'>unsafe_code</span>, <span class='ident'>unused_import_braces</span>, <span class='ident'>unused_qualifications</span>)]</span>
<span class='attribute'>#<span class='op'>!</span>[<span class='ident'>cfg_attr</span>(<span class='ident'>feature</span> <span class='op'>=</span> <span class='string'>&quot;dev&quot;</span>, <span class='ident'>feature</span>(<span class='ident'>plugin</span>))]</span>
<span class='attribute'>#<span class='op'>!</span>[<span class='ident'>cfg_attr</span>(<span class='ident'>feature</span> <span class='op'>=</span> <span class='string'>&quot;dev&quot;</span>, <span class='ident'>plugin</span>(<span class='ident'>clippy</span>))]</span>
<span class='doccomment'>//! A crate for generating large, cryptographically secure prime numbers.</span>
<span class='doccomment'>//! `Primes` are seeded from the operating system&#39;s main source of entropy,</span>
@ -147,8 +151,10 @@
<span class='doccomment'>//! }</span>
<span class='doccomment'>//! ```</span>
<span class='attribute'>#[<span class='ident'>macro_use</span>]</span> <span class='kw'>extern</span> <span class='kw'>crate</span> <span class='ident'>custom_derive</span>;
<span class='attribute'>#[<span class='ident'>macro_use</span>]</span> <span class='kw'>extern</span> <span class='kw'>crate</span> <span class='ident'>newtype_derive</span>;
<span class='attribute'>#[<span class='ident'>macro_use</span>]</span>
<span class='kw'>extern</span> <span class='kw'>crate</span> <span class='ident'>custom_derive</span>;
<span class='attribute'>#[<span class='ident'>macro_use</span>]</span>
<span class='kw'>extern</span> <span class='kw'>crate</span> <span class='ident'>newtype_derive</span>;
<span class='kw'>extern</span> <span class='kw'>crate</span> <span class='ident'>ramp</span>;
<span class='kw'>extern</span> <span class='kw'>crate</span> <span class='ident'>rand</span>;
<span class='kw'>extern</span> <span class='kw'>crate</span> <span class='ident'>test</span>;
@ -171,28 +177,22 @@
<span class='attribute'>#[<span class='ident'>test</span>]</span>
<span class='attribute'>#[<span class='ident'>should_panic</span>]</span>
<span class='kw'>fn</span> <span class='ident'>test_new_small_prime_from_rng</span>() {
<span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>rngesus</span> <span class='op'>=</span> <span class='kw'>match</span> <span class='ident'>OsRng</span>::<span class='ident'>new</span>() {
<span class='prelude-val'>Ok</span>(<span class='ident'>rng</span>) <span class='op'>=&gt;</span> <span class='ident'>rng</span>,
<span class='prelude-val'>Err</span>(<span class='ident'>reason</span>) <span class='op'>=&gt;</span> <span class='macro'>panic</span><span class='macro'>!</span>(<span class='string'>&quot;An error occurred when initializing the RNG: {}&quot;</span>, <span class='ident'>reason</span>)
};
<span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>rngesus</span> <span class='op'>=</span> <span class='ident'>OsRng</span>::<span class='ident'>new</span>().<span class='ident'>unwrap</span>();
<span class='ident'>Prime</span>::<span class='ident'>from_rng</span>(<span class='number'>511</span>, <span class='kw-2'>&amp;</span><span class='kw-2'>mut</span> <span class='ident'>rngesus</span>);
}
<span class='attribute'>#[<span class='ident'>bench</span>]</span>
<span class='attribute'>#[<span class='ident'>ignore</span>]</span>
<span class='kw'>fn</span> <span class='ident'>bench_generate_512_bit_prime</span>(<span class='ident'>b</span>: <span class='kw-2'>&amp;</span><span class='kw-2'>mut</span> <span class='ident'>Bencher</span>) {
<span class='ident'>b</span>.<span class='ident'>iter</span>(<span class='op'>||</span> <span class='ident'>Prime</span>::<span class='ident'>new</span>(<span class='number'>512</span>));
}
<span class='attribute'>#[<span class='ident'>bench</span>]</span>
<span class='attribute'>#[<span class='ident'>ignore</span>]</span>
<span class='kw'>fn</span> <span class='ident'>bench_generate_1024_bit_prime</span>(<span class='ident'>b</span>: <span class='kw-2'>&amp;</span><span class='kw-2'>mut</span> <span class='ident'>Bencher</span>) {
<span class='ident'>b</span>.<span class='ident'>iter</span>(<span class='op'>||</span> <span class='ident'>Prime</span>::<span class='ident'>new</span>(<span class='number'>1024</span>));
}
<span class='attribute'>#[<span class='ident'>bench</span>]</span>
<span class='attribute'>#[<span class='ident'>ignore</span>]</span>
<span class='kw'>fn</span> <span class='ident'>bench_generate_2048_bit_prime</span>(<span class='ident'>b</span>: <span class='kw-2'>&amp;</span><span class='kw-2'>mut</span> <span class='ident'>Bencher</span>) {
<span class='ident'>b</span>.<span class='ident'>iter</span>(<span class='op'>||</span> <span class='ident'>Prime</span>::<span class='ident'>new</span>(<span class='number'>2048</span>));
}

View file

@ -308,72 +308,168 @@
<span id="264">264</span>
<span id="265">265</span>
<span id="266">266</span>
<span id="267">267</span>
<span id="268">268</span>
<span id="269">269</span>
<span id="270">270</span>
<span id="271">271</span>
<span id="272">272</span>
<span id="273">273</span>
<span id="274">274</span>
<span id="275">275</span>
<span id="276">276</span>
<span id="277">277</span>
<span id="278">278</span>
<span id="279">279</span>
<span id="280">280</span>
<span id="281">281</span>
<span id="282">282</span>
<span id="283">283</span>
<span id="284">284</span>
<span id="285">285</span>
<span id="286">286</span>
<span id="287">287</span>
<span id="288">288</span>
<span id="289">289</span>
<span id="290">290</span>
<span id="291">291</span>
<span id="292">292</span>
<span id="293">293</span>
<span id="294">294</span>
<span id="295">295</span>
<span id="296">296</span>
<span id="297">297</span>
<span id="298">298</span>
<span id="299">299</span>
<span id="300">300</span>
<span id="301">301</span>
<span id="302">302</span>
<span id="303">303</span>
<span id="304">304</span>
<span id="305">305</span>
<span id="306">306</span>
<span id="307">307</span>
<span id="308">308</span>
<span id="309">309</span>
<span id="310">310</span>
<span id="311">311</span>
<span id="312">312</span>
<span id="313">313</span>
<span id="314">314</span>
<span id="315">315</span>
<span id="316">316</span>
<span id="317">317</span>
<span id="318">318</span>
<span id="319">319</span>
<span id="320">320</span>
<span id="321">321</span>
<span id="322">322</span>
<span id="323">323</span>
<span id="324">324</span>
<span id="325">325</span>
<span id="326">326</span>
</pre><pre class='rust '>
<span class='kw'>use</span> <span class='ident'>ramp</span>::{<span class='ident'>Int</span>, <span class='ident'>RandomInt</span>};
<span class='kw'>use</span> <span class='ident'>rand</span>::{<span class='ident'>OsRng</span>, <span class='ident'>thread_rng</span>};
<span class='kw'>static</span> <span class='ident'>SMALL_PRIMES</span>: [<span class='ident'>u32</span>; <span class='number'>999</span>] <span class='op'>=</span> [<span class='number'>3</span>, <span class='number'>5</span>, <span class='number'>7</span>, <span class='number'>11</span>, <span class='number'>13</span>, <span class='number'>17</span>, <span class='number'>19</span>, <span class='number'>23</span>, <span class='number'>29</span>, <span class='number'>31</span>, <span class='number'>37</span>, <span class='number'>41</span>, <span class='number'>43</span>, <span class='number'>47</span>, <span class='number'>53</span>, <span class='number'>59</span>, <span class='number'>61</span>,
<span class='number'>67</span>, <span class='number'>71</span>, <span class='number'>73</span>, <span class='number'>79</span>, <span class='number'>83</span>, <span class='number'>89</span>, <span class='number'>97</span>, <span class='number'>101</span>, <span class='number'>103</span>, <span class='number'>107</span>, <span class='number'>109</span>, <span class='number'>113</span>, <span class='number'>127</span>, <span class='number'>131</span>, <span class='number'>137</span>, <span class='number'>139</span>, <span class='number'>149</span>, <span class='number'>151</span>, <span class='number'>157</span>, <span class='number'>163</span>, <span class='number'>167</span>,
<span class='number'>173</span>, <span class='number'>179</span>, <span class='number'>181</span>, <span class='number'>191</span>, <span class='number'>193</span>, <span class='number'>197</span>, <span class='number'>199</span>, <span class='number'>211</span>, <span class='number'>223</span>, <span class='number'>227</span>, <span class='number'>229</span>, <span class='number'>233</span>, <span class='number'>239</span>, <span class='number'>241</span>, <span class='number'>251</span>, <span class='number'>257</span>, <span class='number'>263</span>, <span class='number'>269</span>, <span class='number'>271</span>, <span class='number'>277</span>,
<span class='number'>281</span>, <span class='number'>283</span>, <span class='number'>293</span>, <span class='number'>307</span>, <span class='number'>311</span>, <span class='number'>313</span>, <span class='number'>317</span>, <span class='number'>331</span>, <span class='number'>337</span>, <span class='number'>347</span>, <span class='number'>349</span>, <span class='number'>353</span>, <span class='number'>359</span>, <span class='number'>367</span>, <span class='number'>373</span>, <span class='number'>379</span>, <span class='number'>383</span>, <span class='number'>389</span>, <span class='number'>397</span>, <span class='number'>401</span>,
<span class='number'>409</span>, <span class='number'>419</span>, <span class='number'>421</span>, <span class='number'>431</span>, <span class='number'>433</span>, <span class='number'>439</span>, <span class='number'>443</span>, <span class='number'>449</span>, <span class='number'>457</span>, <span class='number'>461</span>, <span class='number'>463</span>, <span class='number'>467</span>, <span class='number'>479</span>, <span class='number'>487</span>, <span class='number'>491</span>, <span class='number'>499</span>, <span class='number'>503</span>, <span class='number'>509</span>, <span class='number'>521</span>, <span class='number'>523</span>,
<span class='number'>541</span>, <span class='number'>547</span>, <span class='number'>557</span>, <span class='number'>563</span>, <span class='number'>569</span>, <span class='number'>571</span>, <span class='number'>577</span>, <span class='number'>587</span>, <span class='number'>593</span>, <span class='number'>599</span>, <span class='number'>601</span>, <span class='number'>607</span>, <span class='number'>613</span>, <span class='number'>617</span>, <span class='number'>619</span>, <span class='number'>631</span>, <span class='number'>641</span>, <span class='number'>643</span>, <span class='number'>647</span>, <span class='number'>653</span>,
<span class='number'>659</span>, <span class='number'>661</span>, <span class='number'>673</span>, <span class='number'>677</span>, <span class='number'>683</span>, <span class='number'>691</span>, <span class='number'>701</span>, <span class='number'>709</span>, <span class='number'>719</span>, <span class='number'>727</span>, <span class='number'>733</span>, <span class='number'>739</span>, <span class='number'>743</span>, <span class='number'>751</span>, <span class='number'>757</span>, <span class='number'>761</span>, <span class='number'>769</span>, <span class='number'>773</span>, <span class='number'>787</span>, <span class='number'>797</span>,
<span class='number'>809</span>, <span class='number'>811</span>, <span class='number'>821</span>, <span class='number'>823</span>, <span class='number'>827</span>, <span class='number'>829</span>, <span class='number'>839</span>, <span class='number'>853</span>, <span class='number'>857</span>, <span class='number'>859</span>, <span class='number'>863</span>, <span class='number'>877</span>, <span class='number'>881</span>, <span class='number'>883</span>, <span class='number'>887</span>, <span class='number'>907</span>, <span class='number'>911</span>, <span class='number'>919</span>, <span class='number'>929</span>, <span class='number'>937</span>,
<span class='number'>941</span>, <span class='number'>947</span>, <span class='number'>953</span>, <span class='number'>967</span>, <span class='number'>971</span>, <span class='number'>977</span>, <span class='number'>983</span>, <span class='number'>991</span>, <span class='number'>997</span>, <span class='number'>1009</span>, <span class='number'>1013</span>, <span class='number'>1019</span>, <span class='number'>1021</span>, <span class='number'>1031</span>, <span class='number'>1033</span>, <span class='number'>1039</span>, <span class='number'>1049</span>, <span class='number'>1051</span>,
<span class='number'>1061</span>, <span class='number'>1063</span>, <span class='number'>1069</span>, <span class='number'>1087</span>, <span class='number'>1091</span>, <span class='number'>1093</span>, <span class='number'>1097</span>, <span class='number'>1103</span>, <span class='number'>1109</span>, <span class='number'>1117</span>, <span class='number'>1123</span>, <span class='number'>1129</span>, <span class='number'>1151</span>, <span class='number'>1153</span>, <span class='number'>1163</span>, <span class='number'>1171</span>,
<span class='number'>1181</span>, <span class='number'>1187</span>, <span class='number'>1193</span>, <span class='number'>1201</span>, <span class='number'>1213</span>, <span class='number'>1217</span>, <span class='number'>1223</span>, <span class='number'>1229</span>, <span class='number'>1231</span>, <span class='number'>1237</span>, <span class='number'>1249</span>, <span class='number'>1259</span>, <span class='number'>1277</span>, <span class='number'>1279</span>, <span class='number'>1283</span>, <span class='number'>1289</span>,
<span class='number'>1291</span>, <span class='number'>1297</span>, <span class='number'>1301</span>, <span class='number'>1303</span>, <span class='number'>1307</span>, <span class='number'>1319</span>, <span class='number'>1321</span>, <span class='number'>1327</span>, <span class='number'>1361</span>, <span class='number'>1367</span>, <span class='number'>1373</span>, <span class='number'>1381</span>, <span class='number'>1399</span>, <span class='number'>1409</span>, <span class='number'>1423</span>, <span class='number'>1427</span>,
<span class='number'>1429</span>, <span class='number'>1433</span>, <span class='number'>1439</span>, <span class='number'>1447</span>, <span class='number'>1451</span>, <span class='number'>1453</span>, <span class='number'>1459</span>, <span class='number'>1471</span>, <span class='number'>1481</span>, <span class='number'>1483</span>, <span class='number'>1487</span>, <span class='number'>1489</span>, <span class='number'>1493</span>, <span class='number'>1499</span>, <span class='number'>1511</span>, <span class='number'>1523</span>,
<span class='number'>1531</span>, <span class='number'>1543</span>, <span class='number'>1549</span>, <span class='number'>1553</span>, <span class='number'>1559</span>, <span class='number'>1567</span>, <span class='number'>1571</span>, <span class='number'>1579</span>, <span class='number'>1583</span>, <span class='number'>1597</span>, <span class='number'>1601</span>, <span class='number'>1607</span>, <span class='number'>1609</span>, <span class='number'>1613</span>, <span class='number'>1619</span>, <span class='number'>1621</span>,
<span class='number'>1627</span>, <span class='number'>1637</span>, <span class='number'>1657</span>, <span class='number'>1663</span>, <span class='number'>1667</span>, <span class='number'>1669</span>, <span class='number'>1693</span>, <span class='number'>1697</span>, <span class='number'>1699</span>, <span class='number'>1709</span>, <span class='number'>1721</span>, <span class='number'>1723</span>, <span class='number'>1733</span>, <span class='number'>1741</span>, <span class='number'>1747</span>, <span class='number'>1753</span>,
<span class='number'>1759</span>, <span class='number'>1777</span>, <span class='number'>1783</span>, <span class='number'>1787</span>, <span class='number'>1789</span>, <span class='number'>1801</span>, <span class='number'>1811</span>, <span class='number'>1823</span>, <span class='number'>1831</span>, <span class='number'>1847</span>, <span class='number'>1861</span>, <span class='number'>1867</span>, <span class='number'>1871</span>, <span class='number'>1873</span>, <span class='number'>1877</span>, <span class='number'>1879</span>,
<span class='number'>1889</span>, <span class='number'>1901</span>, <span class='number'>1907</span>, <span class='number'>1913</span>, <span class='number'>1931</span>, <span class='number'>1933</span>, <span class='number'>1949</span>, <span class='number'>1951</span>, <span class='number'>1973</span>, <span class='number'>1979</span>, <span class='number'>1987</span>, <span class='number'>1993</span>, <span class='number'>1997</span>, <span class='number'>1999</span>, <span class='number'>2003</span>, <span class='number'>2011</span>,
<span class='number'>2017</span>, <span class='number'>2027</span>, <span class='number'>2029</span>, <span class='number'>2039</span>, <span class='number'>2053</span>, <span class='number'>2063</span>, <span class='number'>2069</span>, <span class='number'>2081</span>, <span class='number'>2083</span>, <span class='number'>2087</span>, <span class='number'>2089</span>, <span class='number'>2099</span>, <span class='number'>2111</span>, <span class='number'>2113</span>, <span class='number'>2129</span>, <span class='number'>2131</span>,
<span class='number'>2137</span>, <span class='number'>2141</span>, <span class='number'>2143</span>, <span class='number'>2153</span>, <span class='number'>2161</span>, <span class='number'>2179</span>, <span class='number'>2203</span>, <span class='number'>2207</span>, <span class='number'>2213</span>, <span class='number'>2221</span>, <span class='number'>2237</span>, <span class='number'>2239</span>, <span class='number'>2243</span>, <span class='number'>2251</span>, <span class='number'>2267</span>, <span class='number'>2269</span>,
<span class='number'>2273</span>, <span class='number'>2281</span>, <span class='number'>2287</span>, <span class='number'>2293</span>, <span class='number'>2297</span>, <span class='number'>2309</span>, <span class='number'>2311</span>, <span class='number'>2333</span>, <span class='number'>2339</span>, <span class='number'>2341</span>, <span class='number'>2347</span>, <span class='number'>2351</span>, <span class='number'>2357</span>, <span class='number'>2371</span>, <span class='number'>2377</span>, <span class='number'>2381</span>,
<span class='number'>2383</span>, <span class='number'>2389</span>, <span class='number'>2393</span>, <span class='number'>2399</span>, <span class='number'>2411</span>, <span class='number'>2417</span>, <span class='number'>2423</span>, <span class='number'>2437</span>, <span class='number'>2441</span>, <span class='number'>2447</span>, <span class='number'>2459</span>, <span class='number'>2467</span>, <span class='number'>2473</span>, <span class='number'>2477</span>, <span class='number'>2503</span>, <span class='number'>2521</span>,
<span class='number'>2531</span>, <span class='number'>2539</span>, <span class='number'>2543</span>, <span class='number'>2549</span>, <span class='number'>2551</span>, <span class='number'>2557</span>, <span class='number'>2579</span>, <span class='number'>2591</span>, <span class='number'>2593</span>, <span class='number'>2609</span>, <span class='number'>2617</span>, <span class='number'>2621</span>, <span class='number'>2633</span>, <span class='number'>2647</span>, <span class='number'>2657</span>, <span class='number'>2659</span>,
<span class='number'>2663</span>, <span class='number'>2671</span>, <span class='number'>2677</span>, <span class='number'>2683</span>, <span class='number'>2687</span>, <span class='number'>2689</span>, <span class='number'>2693</span>, <span class='number'>2699</span>, <span class='number'>2707</span>, <span class='number'>2711</span>, <span class='number'>2713</span>, <span class='number'>2719</span>, <span class='number'>2729</span>, <span class='number'>2731</span>, <span class='number'>2741</span>, <span class='number'>2749</span>,
<span class='number'>2753</span>, <span class='number'>2767</span>, <span class='number'>2777</span>, <span class='number'>2789</span>, <span class='number'>2791</span>, <span class='number'>2797</span>, <span class='number'>2801</span>, <span class='number'>2803</span>, <span class='number'>2819</span>, <span class='number'>2833</span>, <span class='number'>2837</span>, <span class='number'>2843</span>, <span class='number'>2851</span>, <span class='number'>2857</span>, <span class='number'>2861</span>, <span class='number'>2879</span>,
<span class='number'>2887</span>, <span class='number'>2897</span>, <span class='number'>2903</span>, <span class='number'>2909</span>, <span class='number'>2917</span>, <span class='number'>2927</span>, <span class='number'>2939</span>, <span class='number'>2953</span>, <span class='number'>2957</span>, <span class='number'>2963</span>, <span class='number'>2969</span>, <span class='number'>2971</span>, <span class='number'>2999</span>, <span class='number'>3001</span>, <span class='number'>3011</span>, <span class='number'>3019</span>,
<span class='number'>3023</span>, <span class='number'>3037</span>, <span class='number'>3041</span>, <span class='number'>3049</span>, <span class='number'>3061</span>, <span class='number'>3067</span>, <span class='number'>3079</span>, <span class='number'>3083</span>, <span class='number'>3089</span>, <span class='number'>3109</span>, <span class='number'>3119</span>, <span class='number'>3121</span>, <span class='number'>3137</span>, <span class='number'>3163</span>, <span class='number'>3167</span>, <span class='number'>3169</span>,
<span class='number'>3181</span>, <span class='number'>3187</span>, <span class='number'>3191</span>, <span class='number'>3203</span>, <span class='number'>3209</span>, <span class='number'>3217</span>, <span class='number'>3221</span>, <span class='number'>3229</span>, <span class='number'>3251</span>, <span class='number'>3253</span>, <span class='number'>3257</span>, <span class='number'>3259</span>, <span class='number'>3271</span>, <span class='number'>3299</span>, <span class='number'>3301</span>, <span class='number'>3307</span>,
<span class='number'>3313</span>, <span class='number'>3319</span>, <span class='number'>3323</span>, <span class='number'>3329</span>, <span class='number'>3331</span>, <span class='number'>3343</span>, <span class='number'>3347</span>, <span class='number'>3359</span>, <span class='number'>3361</span>, <span class='number'>3371</span>, <span class='number'>3373</span>, <span class='number'>3389</span>, <span class='number'>3391</span>, <span class='number'>3407</span>, <span class='number'>3413</span>, <span class='number'>3433</span>,
<span class='number'>3449</span>, <span class='number'>3457</span>, <span class='number'>3461</span>, <span class='number'>3463</span>, <span class='number'>3467</span>, <span class='number'>3469</span>, <span class='number'>3491</span>, <span class='number'>3499</span>, <span class='number'>3511</span>, <span class='number'>3517</span>, <span class='number'>3527</span>, <span class='number'>3529</span>, <span class='number'>3533</span>, <span class='number'>3539</span>, <span class='number'>3541</span>, <span class='number'>3547</span>,
<span class='number'>3557</span>, <span class='number'>3559</span>, <span class='number'>3571</span>, <span class='number'>3581</span>, <span class='number'>3583</span>, <span class='number'>3593</span>, <span class='number'>3607</span>, <span class='number'>3613</span>, <span class='number'>3617</span>, <span class='number'>3623</span>, <span class='number'>3631</span>, <span class='number'>3637</span>, <span class='number'>3643</span>, <span class='number'>3659</span>, <span class='number'>3671</span>, <span class='number'>3673</span>,
<span class='number'>3677</span>, <span class='number'>3691</span>, <span class='number'>3697</span>, <span class='number'>3701</span>, <span class='number'>3709</span>, <span class='number'>3719</span>, <span class='number'>3727</span>, <span class='number'>3733</span>, <span class='number'>3739</span>, <span class='number'>3761</span>, <span class='number'>3767</span>, <span class='number'>3769</span>, <span class='number'>3779</span>, <span class='number'>3793</span>, <span class='number'>3797</span>, <span class='number'>3803</span>,
<span class='number'>3821</span>, <span class='number'>3823</span>, <span class='number'>3833</span>, <span class='number'>3847</span>, <span class='number'>3851</span>, <span class='number'>3853</span>, <span class='number'>3863</span>, <span class='number'>3877</span>, <span class='number'>3881</span>, <span class='number'>3889</span>, <span class='number'>3907</span>, <span class='number'>3911</span>, <span class='number'>3917</span>, <span class='number'>3919</span>, <span class='number'>3923</span>, <span class='number'>3929</span>,
<span class='number'>3931</span>, <span class='number'>3943</span>, <span class='number'>3947</span>, <span class='number'>3967</span>, <span class='number'>3989</span>, <span class='number'>4001</span>, <span class='number'>4003</span>, <span class='number'>4007</span>, <span class='number'>4013</span>, <span class='number'>4019</span>, <span class='number'>4021</span>, <span class='number'>4027</span>, <span class='number'>4049</span>, <span class='number'>4051</span>, <span class='number'>4057</span>, <span class='number'>4073</span>,
<span class='number'>4079</span>, <span class='number'>4091</span>, <span class='number'>4093</span>, <span class='number'>4099</span>, <span class='number'>4111</span>, <span class='number'>4127</span>, <span class='number'>4129</span>, <span class='number'>4133</span>, <span class='number'>4139</span>, <span class='number'>4153</span>, <span class='number'>4157</span>, <span class='number'>4159</span>, <span class='number'>4177</span>, <span class='number'>4201</span>, <span class='number'>4211</span>, <span class='number'>4217</span>,
<span class='number'>4219</span>, <span class='number'>4229</span>, <span class='number'>4231</span>, <span class='number'>4241</span>, <span class='number'>4243</span>, <span class='number'>4253</span>, <span class='number'>4259</span>, <span class='number'>4261</span>, <span class='number'>4271</span>, <span class='number'>4273</span>, <span class='number'>4283</span>, <span class='number'>4289</span>, <span class='number'>4297</span>, <span class='number'>4327</span>, <span class='number'>4337</span>, <span class='number'>4339</span>,
<span class='number'>4349</span>, <span class='number'>4357</span>, <span class='number'>4363</span>, <span class='number'>4373</span>, <span class='number'>4391</span>, <span class='number'>4397</span>, <span class='number'>4409</span>, <span class='number'>4421</span>, <span class='number'>4423</span>, <span class='number'>4441</span>, <span class='number'>4447</span>, <span class='number'>4451</span>, <span class='number'>4457</span>, <span class='number'>4463</span>, <span class='number'>4481</span>, <span class='number'>4483</span>,
<span class='number'>4493</span>, <span class='number'>4507</span>, <span class='number'>4513</span>, <span class='number'>4517</span>, <span class='number'>4519</span>, <span class='number'>4523</span>, <span class='number'>4547</span>, <span class='number'>4549</span>, <span class='number'>4561</span>, <span class='number'>4567</span>, <span class='number'>4583</span>, <span class='number'>4591</span>, <span class='number'>4597</span>, <span class='number'>4603</span>, <span class='number'>4621</span>, <span class='number'>4637</span>,
<span class='number'>4639</span>, <span class='number'>4643</span>, <span class='number'>4649</span>, <span class='number'>4651</span>, <span class='number'>4657</span>, <span class='number'>4663</span>, <span class='number'>4673</span>, <span class='number'>4679</span>, <span class='number'>4691</span>, <span class='number'>4703</span>, <span class='number'>4721</span>, <span class='number'>4723</span>, <span class='number'>4729</span>, <span class='number'>4733</span>, <span class='number'>4751</span>, <span class='number'>4759</span>,
<span class='number'>4783</span>, <span class='number'>4787</span>, <span class='number'>4789</span>, <span class='number'>4793</span>, <span class='number'>4799</span>, <span class='number'>4801</span>, <span class='number'>4813</span>, <span class='number'>4817</span>, <span class='number'>4831</span>, <span class='number'>4861</span>, <span class='number'>4871</span>, <span class='number'>4877</span>, <span class='number'>4889</span>, <span class='number'>4903</span>, <span class='number'>4909</span>, <span class='number'>4919</span>,
<span class='number'>4931</span>, <span class='number'>4933</span>, <span class='number'>4937</span>, <span class='number'>4943</span>, <span class='number'>4951</span>, <span class='number'>4957</span>, <span class='number'>4967</span>, <span class='number'>4969</span>, <span class='number'>4973</span>, <span class='number'>4987</span>, <span class='number'>4993</span>, <span class='number'>4999</span>, <span class='number'>5003</span>, <span class='number'>5009</span>, <span class='number'>5011</span>, <span class='number'>5021</span>,
<span class='number'>5023</span>, <span class='number'>5039</span>, <span class='number'>5051</span>, <span class='number'>5059</span>, <span class='number'>5077</span>, <span class='number'>5081</span>, <span class='number'>5087</span>, <span class='number'>5099</span>, <span class='number'>5101</span>, <span class='number'>5107</span>, <span class='number'>5113</span>, <span class='number'>5119</span>, <span class='number'>5147</span>, <span class='number'>5153</span>, <span class='number'>5167</span>, <span class='number'>5171</span>,
<span class='number'>5179</span>, <span class='number'>5189</span>, <span class='number'>5197</span>, <span class='number'>5209</span>, <span class='number'>5227</span>, <span class='number'>5231</span>, <span class='number'>5233</span>, <span class='number'>5237</span>, <span class='number'>5261</span>, <span class='number'>5273</span>, <span class='number'>5279</span>, <span class='number'>5281</span>, <span class='number'>5297</span>, <span class='number'>5303</span>, <span class='number'>5309</span>, <span class='number'>5323</span>,
<span class='number'>5333</span>, <span class='number'>5347</span>, <span class='number'>5351</span>, <span class='number'>5381</span>, <span class='number'>5387</span>, <span class='number'>5393</span>, <span class='number'>5399</span>, <span class='number'>5407</span>, <span class='number'>5413</span>, <span class='number'>5417</span>, <span class='number'>5419</span>, <span class='number'>5431</span>, <span class='number'>5437</span>, <span class='number'>5441</span>, <span class='number'>5443</span>, <span class='number'>5449</span>,
<span class='number'>5471</span>, <span class='number'>5477</span>, <span class='number'>5479</span>, <span class='number'>5483</span>, <span class='number'>5501</span>, <span class='number'>5503</span>, <span class='number'>5507</span>, <span class='number'>5519</span>, <span class='number'>5521</span>, <span class='number'>5527</span>, <span class='number'>5531</span>, <span class='number'>5557</span>, <span class='number'>5563</span>, <span class='number'>5569</span>, <span class='number'>5573</span>, <span class='number'>5581</span>,
<span class='number'>5591</span>, <span class='number'>5623</span>, <span class='number'>5639</span>, <span class='number'>5641</span>, <span class='number'>5647</span>, <span class='number'>5651</span>, <span class='number'>5653</span>, <span class='number'>5657</span>, <span class='number'>5659</span>, <span class='number'>5669</span>, <span class='number'>5683</span>, <span class='number'>5689</span>, <span class='number'>5693</span>, <span class='number'>5701</span>, <span class='number'>5711</span>, <span class='number'>5717</span>,
<span class='number'>5737</span>, <span class='number'>5741</span>, <span class='number'>5743</span>, <span class='number'>5749</span>, <span class='number'>5779</span>, <span class='number'>5783</span>, <span class='number'>5791</span>, <span class='number'>5801</span>, <span class='number'>5807</span>, <span class='number'>5813</span>, <span class='number'>5821</span>, <span class='number'>5827</span>, <span class='number'>5839</span>, <span class='number'>5843</span>, <span class='number'>5849</span>, <span class='number'>5851</span>,
<span class='number'>5857</span>, <span class='number'>5861</span>, <span class='number'>5867</span>, <span class='number'>5869</span>, <span class='number'>5879</span>, <span class='number'>5881</span>, <span class='number'>5897</span>, <span class='number'>5903</span>, <span class='number'>5923</span>, <span class='number'>5927</span>, <span class='number'>5939</span>, <span class='number'>5953</span>, <span class='number'>5981</span>, <span class='number'>5987</span>, <span class='number'>6007</span>, <span class='number'>6011</span>,
<span class='number'>6029</span>, <span class='number'>6037</span>, <span class='number'>6043</span>, <span class='number'>6047</span>, <span class='number'>6053</span>, <span class='number'>6067</span>, <span class='number'>6073</span>, <span class='number'>6079</span>, <span class='number'>6089</span>, <span class='number'>6091</span>, <span class='number'>6101</span>, <span class='number'>6113</span>, <span class='number'>6121</span>, <span class='number'>6131</span>, <span class='number'>6133</span>, <span class='number'>6143</span>,
<span class='number'>6151</span>, <span class='number'>6163</span>, <span class='number'>6173</span>, <span class='number'>6197</span>, <span class='number'>6199</span>, <span class='number'>6203</span>, <span class='number'>6211</span>, <span class='number'>6217</span>, <span class='number'>6221</span>, <span class='number'>6229</span>, <span class='number'>6247</span>, <span class='number'>6257</span>, <span class='number'>6263</span>, <span class='number'>6269</span>, <span class='number'>6271</span>, <span class='number'>6277</span>,
<span class='number'>6287</span>, <span class='number'>6299</span>, <span class='number'>6301</span>, <span class='number'>6311</span>, <span class='number'>6317</span>, <span class='number'>6323</span>, <span class='number'>6329</span>, <span class='number'>6337</span>, <span class='number'>6343</span>, <span class='number'>6353</span>, <span class='number'>6359</span>, <span class='number'>6361</span>, <span class='number'>6367</span>, <span class='number'>6373</span>, <span class='number'>6379</span>, <span class='number'>6389</span>,
<span class='number'>6397</span>, <span class='number'>6421</span>, <span class='number'>6427</span>, <span class='number'>6449</span>, <span class='number'>6451</span>, <span class='number'>6469</span>, <span class='number'>6473</span>, <span class='number'>6481</span>, <span class='number'>6491</span>, <span class='number'>6521</span>, <span class='number'>6529</span>, <span class='number'>6547</span>, <span class='number'>6551</span>, <span class='number'>6553</span>, <span class='number'>6563</span>, <span class='number'>6569</span>,
<span class='number'>6571</span>, <span class='number'>6577</span>, <span class='number'>6581</span>, <span class='number'>6599</span>, <span class='number'>6607</span>, <span class='number'>6619</span>, <span class='number'>6637</span>, <span class='number'>6653</span>, <span class='number'>6659</span>, <span class='number'>6661</span>, <span class='number'>6673</span>, <span class='number'>6679</span>, <span class='number'>6689</span>, <span class='number'>6691</span>, <span class='number'>6701</span>, <span class='number'>6703</span>,
<span class='number'>6709</span>, <span class='number'>6719</span>, <span class='number'>6733</span>, <span class='number'>6737</span>, <span class='number'>6761</span>, <span class='number'>6763</span>, <span class='number'>6779</span>, <span class='number'>6781</span>, <span class='number'>6791</span>, <span class='number'>6793</span>, <span class='number'>6803</span>, <span class='number'>6823</span>, <span class='number'>6827</span>, <span class='number'>6829</span>, <span class='number'>6833</span>, <span class='number'>6841</span>,
<span class='number'>6857</span>, <span class='number'>6863</span>, <span class='number'>6869</span>, <span class='number'>6871</span>, <span class='number'>6883</span>, <span class='number'>6899</span>, <span class='number'>6907</span>, <span class='number'>6911</span>, <span class='number'>6917</span>, <span class='number'>6947</span>, <span class='number'>6949</span>, <span class='number'>6959</span>, <span class='number'>6961</span>, <span class='number'>6967</span>, <span class='number'>6971</span>, <span class='number'>6977</span>,
<span class='number'>6983</span>, <span class='number'>6991</span>, <span class='number'>6997</span>, <span class='number'>7001</span>, <span class='number'>7013</span>, <span class='number'>7019</span>, <span class='number'>7027</span>, <span class='number'>7039</span>, <span class='number'>7043</span>, <span class='number'>7057</span>, <span class='number'>7069</span>, <span class='number'>7079</span>, <span class='number'>7103</span>, <span class='number'>7109</span>, <span class='number'>7121</span>, <span class='number'>7127</span>,
<span class='number'>7129</span>, <span class='number'>7151</span>, <span class='number'>7159</span>, <span class='number'>7177</span>, <span class='number'>7187</span>, <span class='number'>7193</span>, <span class='number'>7207</span>, <span class='number'>7211</span>, <span class='number'>7213</span>, <span class='number'>7219</span>, <span class='number'>7229</span>, <span class='number'>7237</span>, <span class='number'>7243</span>, <span class='number'>7247</span>, <span class='number'>7253</span>, <span class='number'>7283</span>,
<span class='number'>7297</span>, <span class='number'>7307</span>, <span class='number'>7309</span>, <span class='number'>7321</span>, <span class='number'>7331</span>, <span class='number'>7333</span>, <span class='number'>7349</span>, <span class='number'>7351</span>, <span class='number'>7369</span>, <span class='number'>7393</span>, <span class='number'>7411</span>, <span class='number'>7417</span>, <span class='number'>7433</span>, <span class='number'>7451</span>, <span class='number'>7457</span>, <span class='number'>7459</span>,
<span class='number'>7477</span>, <span class='number'>7481</span>, <span class='number'>7487</span>, <span class='number'>7489</span>, <span class='number'>7499</span>, <span class='number'>7507</span>, <span class='number'>7517</span>, <span class='number'>7523</span>, <span class='number'>7529</span>, <span class='number'>7537</span>, <span class='number'>7541</span>, <span class='number'>7547</span>, <span class='number'>7549</span>, <span class='number'>7559</span>, <span class='number'>7561</span>, <span class='number'>7573</span>,
<span class='number'>7577</span>, <span class='number'>7583</span>, <span class='number'>7589</span>, <span class='number'>7591</span>, <span class='number'>7603</span>, <span class='number'>7607</span>, <span class='number'>7621</span>, <span class='number'>7639</span>, <span class='number'>7643</span>, <span class='number'>7649</span>, <span class='number'>7669</span>, <span class='number'>7673</span>, <span class='number'>7681</span>, <span class='number'>7687</span>, <span class='number'>7691</span>, <span class='number'>7699</span>,
<span class='number'>7703</span>, <span class='number'>7717</span>, <span class='number'>7723</span>, <span class='number'>7727</span>, <span class='number'>7741</span>, <span class='number'>7753</span>, <span class='number'>7757</span>, <span class='number'>7759</span>, <span class='number'>7789</span>, <span class='number'>7793</span>, <span class='number'>7817</span>, <span class='number'>7823</span>, <span class='number'>7829</span>, <span class='number'>7841</span>, <span class='number'>7853</span>, <span class='number'>7867</span>,
<span class='number'>7873</span>, <span class='number'>7877</span>, <span class='number'>7879</span>, <span class='number'>7883</span>, <span class='number'>7901</span>, <span class='number'>7907</span>, <span class='number'>7919</span>];
<span class='kw'>static</span> <span class='ident'>SMALL_PRIMES</span>: [<span class='ident'>u32</span>; <span class='number'>999</span>] <span class='op'>=</span> [<span class='number'>3</span>, <span class='number'>5</span>, <span class='number'>7</span>, <span class='number'>11</span>, <span class='number'>13</span>, <span class='number'>17</span>, <span class='number'>19</span>, <span class='number'>23</span>, <span class='number'>29</span>, <span class='number'>31</span>, <span class='number'>37</span>, <span class='number'>41</span>, <span class='number'>43</span>, <span class='number'>47</span>, <span class='number'>53</span>, <span class='number'>59</span>,
<span class='number'>61</span>, <span class='number'>67</span>, <span class='number'>71</span>, <span class='number'>73</span>, <span class='number'>79</span>, <span class='number'>83</span>, <span class='number'>89</span>, <span class='number'>97</span>, <span class='number'>101</span>, <span class='number'>103</span>, <span class='number'>107</span>, <span class='number'>109</span>, <span class='number'>113</span>, <span class='number'>127</span>,
<span class='number'>131</span>, <span class='number'>137</span>, <span class='number'>139</span>, <span class='number'>149</span>, <span class='number'>151</span>, <span class='number'>157</span>, <span class='number'>163</span>, <span class='number'>167</span>, <span class='number'>173</span>, <span class='number'>179</span>, <span class='number'>181</span>, <span class='number'>191</span>,
<span class='number'>193</span>, <span class='number'>197</span>, <span class='number'>199</span>, <span class='number'>211</span>, <span class='number'>223</span>, <span class='number'>227</span>, <span class='number'>229</span>, <span class='number'>233</span>, <span class='number'>239</span>, <span class='number'>241</span>, <span class='number'>251</span>, <span class='number'>257</span>,
<span class='number'>263</span>, <span class='number'>269</span>, <span class='number'>271</span>, <span class='number'>277</span>, <span class='number'>281</span>, <span class='number'>283</span>, <span class='number'>293</span>, <span class='number'>307</span>, <span class='number'>311</span>, <span class='number'>313</span>, <span class='number'>317</span>, <span class='number'>331</span>,
<span class='number'>337</span>, <span class='number'>347</span>, <span class='number'>349</span>, <span class='number'>353</span>, <span class='number'>359</span>, <span class='number'>367</span>, <span class='number'>373</span>, <span class='number'>379</span>, <span class='number'>383</span>, <span class='number'>389</span>, <span class='number'>397</span>, <span class='number'>401</span>,
<span class='number'>409</span>, <span class='number'>419</span>, <span class='number'>421</span>, <span class='number'>431</span>, <span class='number'>433</span>, <span class='number'>439</span>, <span class='number'>443</span>, <span class='number'>449</span>, <span class='number'>457</span>, <span class='number'>461</span>, <span class='number'>463</span>, <span class='number'>467</span>,
<span class='number'>479</span>, <span class='number'>487</span>, <span class='number'>491</span>, <span class='number'>499</span>, <span class='number'>503</span>, <span class='number'>509</span>, <span class='number'>521</span>, <span class='number'>523</span>, <span class='number'>541</span>, <span class='number'>547</span>, <span class='number'>557</span>, <span class='number'>563</span>,
<span class='number'>569</span>, <span class='number'>571</span>, <span class='number'>577</span>, <span class='number'>587</span>, <span class='number'>593</span>, <span class='number'>599</span>, <span class='number'>601</span>, <span class='number'>607</span>, <span class='number'>613</span>, <span class='number'>617</span>, <span class='number'>619</span>, <span class='number'>631</span>,
<span class='number'>641</span>, <span class='number'>643</span>, <span class='number'>647</span>, <span class='number'>653</span>, <span class='number'>659</span>, <span class='number'>661</span>, <span class='number'>673</span>, <span class='number'>677</span>, <span class='number'>683</span>, <span class='number'>691</span>, <span class='number'>701</span>, <span class='number'>709</span>,
<span class='number'>719</span>, <span class='number'>727</span>, <span class='number'>733</span>, <span class='number'>739</span>, <span class='number'>743</span>, <span class='number'>751</span>, <span class='number'>757</span>, <span class='number'>761</span>, <span class='number'>769</span>, <span class='number'>773</span>, <span class='number'>787</span>, <span class='number'>797</span>,
<span class='number'>809</span>, <span class='number'>811</span>, <span class='number'>821</span>, <span class='number'>823</span>, <span class='number'>827</span>, <span class='number'>829</span>, <span class='number'>839</span>, <span class='number'>853</span>, <span class='number'>857</span>, <span class='number'>859</span>, <span class='number'>863</span>, <span class='number'>877</span>,
<span class='number'>881</span>, <span class='number'>883</span>, <span class='number'>887</span>, <span class='number'>907</span>, <span class='number'>911</span>, <span class='number'>919</span>, <span class='number'>929</span>, <span class='number'>937</span>, <span class='number'>941</span>, <span class='number'>947</span>, <span class='number'>953</span>, <span class='number'>967</span>,
<span class='number'>971</span>, <span class='number'>977</span>, <span class='number'>983</span>, <span class='number'>991</span>, <span class='number'>997</span>, <span class='number'>1009</span>, <span class='number'>1013</span>, <span class='number'>1019</span>, <span class='number'>1021</span>, <span class='number'>1031</span>, <span class='number'>1033</span>,
<span class='number'>1039</span>, <span class='number'>1049</span>, <span class='number'>1051</span>, <span class='number'>1061</span>, <span class='number'>1063</span>, <span class='number'>1069</span>, <span class='number'>1087</span>, <span class='number'>1091</span>, <span class='number'>1093</span>, <span class='number'>1097</span>,
<span class='number'>1103</span>, <span class='number'>1109</span>, <span class='number'>1117</span>, <span class='number'>1123</span>, <span class='number'>1129</span>, <span class='number'>1151</span>, <span class='number'>1153</span>, <span class='number'>1163</span>, <span class='number'>1171</span>, <span class='number'>1181</span>,
<span class='number'>1187</span>, <span class='number'>1193</span>, <span class='number'>1201</span>, <span class='number'>1213</span>, <span class='number'>1217</span>, <span class='number'>1223</span>, <span class='number'>1229</span>, <span class='number'>1231</span>, <span class='number'>1237</span>, <span class='number'>1249</span>,
<span class='number'>1259</span>, <span class='number'>1277</span>, <span class='number'>1279</span>, <span class='number'>1283</span>, <span class='number'>1289</span>, <span class='number'>1291</span>, <span class='number'>1297</span>, <span class='number'>1301</span>, <span class='number'>1303</span>, <span class='number'>1307</span>,
<span class='number'>1319</span>, <span class='number'>1321</span>, <span class='number'>1327</span>, <span class='number'>1361</span>, <span class='number'>1367</span>, <span class='number'>1373</span>, <span class='number'>1381</span>, <span class='number'>1399</span>, <span class='number'>1409</span>, <span class='number'>1423</span>,
<span class='number'>1427</span>, <span class='number'>1429</span>, <span class='number'>1433</span>, <span class='number'>1439</span>, <span class='number'>1447</span>, <span class='number'>1451</span>, <span class='number'>1453</span>, <span class='number'>1459</span>, <span class='number'>1471</span>, <span class='number'>1481</span>,
<span class='number'>1483</span>, <span class='number'>1487</span>, <span class='number'>1489</span>, <span class='number'>1493</span>, <span class='number'>1499</span>, <span class='number'>1511</span>, <span class='number'>1523</span>, <span class='number'>1531</span>, <span class='number'>1543</span>, <span class='number'>1549</span>,
<span class='number'>1553</span>, <span class='number'>1559</span>, <span class='number'>1567</span>, <span class='number'>1571</span>, <span class='number'>1579</span>, <span class='number'>1583</span>, <span class='number'>1597</span>, <span class='number'>1601</span>, <span class='number'>1607</span>, <span class='number'>1609</span>,
<span class='number'>1613</span>, <span class='number'>1619</span>, <span class='number'>1621</span>, <span class='number'>1627</span>, <span class='number'>1637</span>, <span class='number'>1657</span>, <span class='number'>1663</span>, <span class='number'>1667</span>, <span class='number'>1669</span>, <span class='number'>1693</span>,
<span class='number'>1697</span>, <span class='number'>1699</span>, <span class='number'>1709</span>, <span class='number'>1721</span>, <span class='number'>1723</span>, <span class='number'>1733</span>, <span class='number'>1741</span>, <span class='number'>1747</span>, <span class='number'>1753</span>, <span class='number'>1759</span>,
<span class='number'>1777</span>, <span class='number'>1783</span>, <span class='number'>1787</span>, <span class='number'>1789</span>, <span class='number'>1801</span>, <span class='number'>1811</span>, <span class='number'>1823</span>, <span class='number'>1831</span>, <span class='number'>1847</span>, <span class='number'>1861</span>,
<span class='number'>1867</span>, <span class='number'>1871</span>, <span class='number'>1873</span>, <span class='number'>1877</span>, <span class='number'>1879</span>, <span class='number'>1889</span>, <span class='number'>1901</span>, <span class='number'>1907</span>, <span class='number'>1913</span>, <span class='number'>1931</span>,
<span class='number'>1933</span>, <span class='number'>1949</span>, <span class='number'>1951</span>, <span class='number'>1973</span>, <span class='number'>1979</span>, <span class='number'>1987</span>, <span class='number'>1993</span>, <span class='number'>1997</span>, <span class='number'>1999</span>, <span class='number'>2003</span>,
<span class='number'>2011</span>, <span class='number'>2017</span>, <span class='number'>2027</span>, <span class='number'>2029</span>, <span class='number'>2039</span>, <span class='number'>2053</span>, <span class='number'>2063</span>, <span class='number'>2069</span>, <span class='number'>2081</span>, <span class='number'>2083</span>,
<span class='number'>2087</span>, <span class='number'>2089</span>, <span class='number'>2099</span>, <span class='number'>2111</span>, <span class='number'>2113</span>, <span class='number'>2129</span>, <span class='number'>2131</span>, <span class='number'>2137</span>, <span class='number'>2141</span>, <span class='number'>2143</span>,
<span class='number'>2153</span>, <span class='number'>2161</span>, <span class='number'>2179</span>, <span class='number'>2203</span>, <span class='number'>2207</span>, <span class='number'>2213</span>, <span class='number'>2221</span>, <span class='number'>2237</span>, <span class='number'>2239</span>, <span class='number'>2243</span>,
<span class='number'>2251</span>, <span class='number'>2267</span>, <span class='number'>2269</span>, <span class='number'>2273</span>, <span class='number'>2281</span>, <span class='number'>2287</span>, <span class='number'>2293</span>, <span class='number'>2297</span>, <span class='number'>2309</span>, <span class='number'>2311</span>,
<span class='number'>2333</span>, <span class='number'>2339</span>, <span class='number'>2341</span>, <span class='number'>2347</span>, <span class='number'>2351</span>, <span class='number'>2357</span>, <span class='number'>2371</span>, <span class='number'>2377</span>, <span class='number'>2381</span>, <span class='number'>2383</span>,
<span class='number'>2389</span>, <span class='number'>2393</span>, <span class='number'>2399</span>, <span class='number'>2411</span>, <span class='number'>2417</span>, <span class='number'>2423</span>, <span class='number'>2437</span>, <span class='number'>2441</span>, <span class='number'>2447</span>, <span class='number'>2459</span>,
<span class='number'>2467</span>, <span class='number'>2473</span>, <span class='number'>2477</span>, <span class='number'>2503</span>, <span class='number'>2521</span>, <span class='number'>2531</span>, <span class='number'>2539</span>, <span class='number'>2543</span>, <span class='number'>2549</span>, <span class='number'>2551</span>,
<span class='number'>2557</span>, <span class='number'>2579</span>, <span class='number'>2591</span>, <span class='number'>2593</span>, <span class='number'>2609</span>, <span class='number'>2617</span>, <span class='number'>2621</span>, <span class='number'>2633</span>, <span class='number'>2647</span>, <span class='number'>2657</span>,
<span class='number'>2659</span>, <span class='number'>2663</span>, <span class='number'>2671</span>, <span class='number'>2677</span>, <span class='number'>2683</span>, <span class='number'>2687</span>, <span class='number'>2689</span>, <span class='number'>2693</span>, <span class='number'>2699</span>, <span class='number'>2707</span>,
<span class='number'>2711</span>, <span class='number'>2713</span>, <span class='number'>2719</span>, <span class='number'>2729</span>, <span class='number'>2731</span>, <span class='number'>2741</span>, <span class='number'>2749</span>, <span class='number'>2753</span>, <span class='number'>2767</span>, <span class='number'>2777</span>,
<span class='number'>2789</span>, <span class='number'>2791</span>, <span class='number'>2797</span>, <span class='number'>2801</span>, <span class='number'>2803</span>, <span class='number'>2819</span>, <span class='number'>2833</span>, <span class='number'>2837</span>, <span class='number'>2843</span>, <span class='number'>2851</span>,
<span class='number'>2857</span>, <span class='number'>2861</span>, <span class='number'>2879</span>, <span class='number'>2887</span>, <span class='number'>2897</span>, <span class='number'>2903</span>, <span class='number'>2909</span>, <span class='number'>2917</span>, <span class='number'>2927</span>, <span class='number'>2939</span>,
<span class='number'>2953</span>, <span class='number'>2957</span>, <span class='number'>2963</span>, <span class='number'>2969</span>, <span class='number'>2971</span>, <span class='number'>2999</span>, <span class='number'>3001</span>, <span class='number'>3011</span>, <span class='number'>3019</span>, <span class='number'>3023</span>,
<span class='number'>3037</span>, <span class='number'>3041</span>, <span class='number'>3049</span>, <span class='number'>3061</span>, <span class='number'>3067</span>, <span class='number'>3079</span>, <span class='number'>3083</span>, <span class='number'>3089</span>, <span class='number'>3109</span>, <span class='number'>3119</span>,
<span class='number'>3121</span>, <span class='number'>3137</span>, <span class='number'>3163</span>, <span class='number'>3167</span>, <span class='number'>3169</span>, <span class='number'>3181</span>, <span class='number'>3187</span>, <span class='number'>3191</span>, <span class='number'>3203</span>, <span class='number'>3209</span>,
<span class='number'>3217</span>, <span class='number'>3221</span>, <span class='number'>3229</span>, <span class='number'>3251</span>, <span class='number'>3253</span>, <span class='number'>3257</span>, <span class='number'>3259</span>, <span class='number'>3271</span>, <span class='number'>3299</span>, <span class='number'>3301</span>,
<span class='number'>3307</span>, <span class='number'>3313</span>, <span class='number'>3319</span>, <span class='number'>3323</span>, <span class='number'>3329</span>, <span class='number'>3331</span>, <span class='number'>3343</span>, <span class='number'>3347</span>, <span class='number'>3359</span>, <span class='number'>3361</span>,
<span class='number'>3371</span>, <span class='number'>3373</span>, <span class='number'>3389</span>, <span class='number'>3391</span>, <span class='number'>3407</span>, <span class='number'>3413</span>, <span class='number'>3433</span>, <span class='number'>3449</span>, <span class='number'>3457</span>, <span class='number'>3461</span>,
<span class='number'>3463</span>, <span class='number'>3467</span>, <span class='number'>3469</span>, <span class='number'>3491</span>, <span class='number'>3499</span>, <span class='number'>3511</span>, <span class='number'>3517</span>, <span class='number'>3527</span>, <span class='number'>3529</span>, <span class='number'>3533</span>,
<span class='number'>3539</span>, <span class='number'>3541</span>, <span class='number'>3547</span>, <span class='number'>3557</span>, <span class='number'>3559</span>, <span class='number'>3571</span>, <span class='number'>3581</span>, <span class='number'>3583</span>, <span class='number'>3593</span>, <span class='number'>3607</span>,
<span class='number'>3613</span>, <span class='number'>3617</span>, <span class='number'>3623</span>, <span class='number'>3631</span>, <span class='number'>3637</span>, <span class='number'>3643</span>, <span class='number'>3659</span>, <span class='number'>3671</span>, <span class='number'>3673</span>, <span class='number'>3677</span>,
<span class='number'>3691</span>, <span class='number'>3697</span>, <span class='number'>3701</span>, <span class='number'>3709</span>, <span class='number'>3719</span>, <span class='number'>3727</span>, <span class='number'>3733</span>, <span class='number'>3739</span>, <span class='number'>3761</span>, <span class='number'>3767</span>,
<span class='number'>3769</span>, <span class='number'>3779</span>, <span class='number'>3793</span>, <span class='number'>3797</span>, <span class='number'>3803</span>, <span class='number'>3821</span>, <span class='number'>3823</span>, <span class='number'>3833</span>, <span class='number'>3847</span>, <span class='number'>3851</span>,
<span class='number'>3853</span>, <span class='number'>3863</span>, <span class='number'>3877</span>, <span class='number'>3881</span>, <span class='number'>3889</span>, <span class='number'>3907</span>, <span class='number'>3911</span>, <span class='number'>3917</span>, <span class='number'>3919</span>, <span class='number'>3923</span>,
<span class='number'>3929</span>, <span class='number'>3931</span>, <span class='number'>3943</span>, <span class='number'>3947</span>, <span class='number'>3967</span>, <span class='number'>3989</span>, <span class='number'>4001</span>, <span class='number'>4003</span>, <span class='number'>4007</span>, <span class='number'>4013</span>,
<span class='number'>4019</span>, <span class='number'>4021</span>, <span class='number'>4027</span>, <span class='number'>4049</span>, <span class='number'>4051</span>, <span class='number'>4057</span>, <span class='number'>4073</span>, <span class='number'>4079</span>, <span class='number'>4091</span>, <span class='number'>4093</span>,
<span class='number'>4099</span>, <span class='number'>4111</span>, <span class='number'>4127</span>, <span class='number'>4129</span>, <span class='number'>4133</span>, <span class='number'>4139</span>, <span class='number'>4153</span>, <span class='number'>4157</span>, <span class='number'>4159</span>, <span class='number'>4177</span>,
<span class='number'>4201</span>, <span class='number'>4211</span>, <span class='number'>4217</span>, <span class='number'>4219</span>, <span class='number'>4229</span>, <span class='number'>4231</span>, <span class='number'>4241</span>, <span class='number'>4243</span>, <span class='number'>4253</span>, <span class='number'>4259</span>,
<span class='number'>4261</span>, <span class='number'>4271</span>, <span class='number'>4273</span>, <span class='number'>4283</span>, <span class='number'>4289</span>, <span class='number'>4297</span>, <span class='number'>4327</span>, <span class='number'>4337</span>, <span class='number'>4339</span>, <span class='number'>4349</span>,
<span class='number'>4357</span>, <span class='number'>4363</span>, <span class='number'>4373</span>, <span class='number'>4391</span>, <span class='number'>4397</span>, <span class='number'>4409</span>, <span class='number'>4421</span>, <span class='number'>4423</span>, <span class='number'>4441</span>, <span class='number'>4447</span>,
<span class='number'>4451</span>, <span class='number'>4457</span>, <span class='number'>4463</span>, <span class='number'>4481</span>, <span class='number'>4483</span>, <span class='number'>4493</span>, <span class='number'>4507</span>, <span class='number'>4513</span>, <span class='number'>4517</span>, <span class='number'>4519</span>,
<span class='number'>4523</span>, <span class='number'>4547</span>, <span class='number'>4549</span>, <span class='number'>4561</span>, <span class='number'>4567</span>, <span class='number'>4583</span>, <span class='number'>4591</span>, <span class='number'>4597</span>, <span class='number'>4603</span>, <span class='number'>4621</span>,
<span class='number'>4637</span>, <span class='number'>4639</span>, <span class='number'>4643</span>, <span class='number'>4649</span>, <span class='number'>4651</span>, <span class='number'>4657</span>, <span class='number'>4663</span>, <span class='number'>4673</span>, <span class='number'>4679</span>, <span class='number'>4691</span>,
<span class='number'>4703</span>, <span class='number'>4721</span>, <span class='number'>4723</span>, <span class='number'>4729</span>, <span class='number'>4733</span>, <span class='number'>4751</span>, <span class='number'>4759</span>, <span class='number'>4783</span>, <span class='number'>4787</span>, <span class='number'>4789</span>,
<span class='number'>4793</span>, <span class='number'>4799</span>, <span class='number'>4801</span>, <span class='number'>4813</span>, <span class='number'>4817</span>, <span class='number'>4831</span>, <span class='number'>4861</span>, <span class='number'>4871</span>, <span class='number'>4877</span>, <span class='number'>4889</span>,
<span class='number'>4903</span>, <span class='number'>4909</span>, <span class='number'>4919</span>, <span class='number'>4931</span>, <span class='number'>4933</span>, <span class='number'>4937</span>, <span class='number'>4943</span>, <span class='number'>4951</span>, <span class='number'>4957</span>, <span class='number'>4967</span>,
<span class='number'>4969</span>, <span class='number'>4973</span>, <span class='number'>4987</span>, <span class='number'>4993</span>, <span class='number'>4999</span>, <span class='number'>5003</span>, <span class='number'>5009</span>, <span class='number'>5011</span>, <span class='number'>5021</span>, <span class='number'>5023</span>,
<span class='number'>5039</span>, <span class='number'>5051</span>, <span class='number'>5059</span>, <span class='number'>5077</span>, <span class='number'>5081</span>, <span class='number'>5087</span>, <span class='number'>5099</span>, <span class='number'>5101</span>, <span class='number'>5107</span>, <span class='number'>5113</span>,
<span class='number'>5119</span>, <span class='number'>5147</span>, <span class='number'>5153</span>, <span class='number'>5167</span>, <span class='number'>5171</span>, <span class='number'>5179</span>, <span class='number'>5189</span>, <span class='number'>5197</span>, <span class='number'>5209</span>, <span class='number'>5227</span>,
<span class='number'>5231</span>, <span class='number'>5233</span>, <span class='number'>5237</span>, <span class='number'>5261</span>, <span class='number'>5273</span>, <span class='number'>5279</span>, <span class='number'>5281</span>, <span class='number'>5297</span>, <span class='number'>5303</span>, <span class='number'>5309</span>,
<span class='number'>5323</span>, <span class='number'>5333</span>, <span class='number'>5347</span>, <span class='number'>5351</span>, <span class='number'>5381</span>, <span class='number'>5387</span>, <span class='number'>5393</span>, <span class='number'>5399</span>, <span class='number'>5407</span>, <span class='number'>5413</span>,
<span class='number'>5417</span>, <span class='number'>5419</span>, <span class='number'>5431</span>, <span class='number'>5437</span>, <span class='number'>5441</span>, <span class='number'>5443</span>, <span class='number'>5449</span>, <span class='number'>5471</span>, <span class='number'>5477</span>, <span class='number'>5479</span>,
<span class='number'>5483</span>, <span class='number'>5501</span>, <span class='number'>5503</span>, <span class='number'>5507</span>, <span class='number'>5519</span>, <span class='number'>5521</span>, <span class='number'>5527</span>, <span class='number'>5531</span>, <span class='number'>5557</span>, <span class='number'>5563</span>,
<span class='number'>5569</span>, <span class='number'>5573</span>, <span class='number'>5581</span>, <span class='number'>5591</span>, <span class='number'>5623</span>, <span class='number'>5639</span>, <span class='number'>5641</span>, <span class='number'>5647</span>, <span class='number'>5651</span>, <span class='number'>5653</span>,
<span class='number'>5657</span>, <span class='number'>5659</span>, <span class='number'>5669</span>, <span class='number'>5683</span>, <span class='number'>5689</span>, <span class='number'>5693</span>, <span class='number'>5701</span>, <span class='number'>5711</span>, <span class='number'>5717</span>, <span class='number'>5737</span>,
<span class='number'>5741</span>, <span class='number'>5743</span>, <span class='number'>5749</span>, <span class='number'>5779</span>, <span class='number'>5783</span>, <span class='number'>5791</span>, <span class='number'>5801</span>, <span class='number'>5807</span>, <span class='number'>5813</span>, <span class='number'>5821</span>,
<span class='number'>5827</span>, <span class='number'>5839</span>, <span class='number'>5843</span>, <span class='number'>5849</span>, <span class='number'>5851</span>, <span class='number'>5857</span>, <span class='number'>5861</span>, <span class='number'>5867</span>, <span class='number'>5869</span>, <span class='number'>5879</span>,
<span class='number'>5881</span>, <span class='number'>5897</span>, <span class='number'>5903</span>, <span class='number'>5923</span>, <span class='number'>5927</span>, <span class='number'>5939</span>, <span class='number'>5953</span>, <span class='number'>5981</span>, <span class='number'>5987</span>, <span class='number'>6007</span>,
<span class='number'>6011</span>, <span class='number'>6029</span>, <span class='number'>6037</span>, <span class='number'>6043</span>, <span class='number'>6047</span>, <span class='number'>6053</span>, <span class='number'>6067</span>, <span class='number'>6073</span>, <span class='number'>6079</span>, <span class='number'>6089</span>,
<span class='number'>6091</span>, <span class='number'>6101</span>, <span class='number'>6113</span>, <span class='number'>6121</span>, <span class='number'>6131</span>, <span class='number'>6133</span>, <span class='number'>6143</span>, <span class='number'>6151</span>, <span class='number'>6163</span>, <span class='number'>6173</span>,
<span class='number'>6197</span>, <span class='number'>6199</span>, <span class='number'>6203</span>, <span class='number'>6211</span>, <span class='number'>6217</span>, <span class='number'>6221</span>, <span class='number'>6229</span>, <span class='number'>6247</span>, <span class='number'>6257</span>, <span class='number'>6263</span>,
<span class='number'>6269</span>, <span class='number'>6271</span>, <span class='number'>6277</span>, <span class='number'>6287</span>, <span class='number'>6299</span>, <span class='number'>6301</span>, <span class='number'>6311</span>, <span class='number'>6317</span>, <span class='number'>6323</span>, <span class='number'>6329</span>,
<span class='number'>6337</span>, <span class='number'>6343</span>, <span class='number'>6353</span>, <span class='number'>6359</span>, <span class='number'>6361</span>, <span class='number'>6367</span>, <span class='number'>6373</span>, <span class='number'>6379</span>, <span class='number'>6389</span>, <span class='number'>6397</span>,
<span class='number'>6421</span>, <span class='number'>6427</span>, <span class='number'>6449</span>, <span class='number'>6451</span>, <span class='number'>6469</span>, <span class='number'>6473</span>, <span class='number'>6481</span>, <span class='number'>6491</span>, <span class='number'>6521</span>, <span class='number'>6529</span>,
<span class='number'>6547</span>, <span class='number'>6551</span>, <span class='number'>6553</span>, <span class='number'>6563</span>, <span class='number'>6569</span>, <span class='number'>6571</span>, <span class='number'>6577</span>, <span class='number'>6581</span>, <span class='number'>6599</span>, <span class='number'>6607</span>,
<span class='number'>6619</span>, <span class='number'>6637</span>, <span class='number'>6653</span>, <span class='number'>6659</span>, <span class='number'>6661</span>, <span class='number'>6673</span>, <span class='number'>6679</span>, <span class='number'>6689</span>, <span class='number'>6691</span>, <span class='number'>6701</span>,
<span class='number'>6703</span>, <span class='number'>6709</span>, <span class='number'>6719</span>, <span class='number'>6733</span>, <span class='number'>6737</span>, <span class='number'>6761</span>, <span class='number'>6763</span>, <span class='number'>6779</span>, <span class='number'>6781</span>, <span class='number'>6791</span>,
<span class='number'>6793</span>, <span class='number'>6803</span>, <span class='number'>6823</span>, <span class='number'>6827</span>, <span class='number'>6829</span>, <span class='number'>6833</span>, <span class='number'>6841</span>, <span class='number'>6857</span>, <span class='number'>6863</span>, <span class='number'>6869</span>,
<span class='number'>6871</span>, <span class='number'>6883</span>, <span class='number'>6899</span>, <span class='number'>6907</span>, <span class='number'>6911</span>, <span class='number'>6917</span>, <span class='number'>6947</span>, <span class='number'>6949</span>, <span class='number'>6959</span>, <span class='number'>6961</span>,
<span class='number'>6967</span>, <span class='number'>6971</span>, <span class='number'>6977</span>, <span class='number'>6983</span>, <span class='number'>6991</span>, <span class='number'>6997</span>, <span class='number'>7001</span>, <span class='number'>7013</span>, <span class='number'>7019</span>, <span class='number'>7027</span>,
<span class='number'>7039</span>, <span class='number'>7043</span>, <span class='number'>7057</span>, <span class='number'>7069</span>, <span class='number'>7079</span>, <span class='number'>7103</span>, <span class='number'>7109</span>, <span class='number'>7121</span>, <span class='number'>7127</span>, <span class='number'>7129</span>,
<span class='number'>7151</span>, <span class='number'>7159</span>, <span class='number'>7177</span>, <span class='number'>7187</span>, <span class='number'>7193</span>, <span class='number'>7207</span>, <span class='number'>7211</span>, <span class='number'>7213</span>, <span class='number'>7219</span>, <span class='number'>7229</span>,
<span class='number'>7237</span>, <span class='number'>7243</span>, <span class='number'>7247</span>, <span class='number'>7253</span>, <span class='number'>7283</span>, <span class='number'>7297</span>, <span class='number'>7307</span>, <span class='number'>7309</span>, <span class='number'>7321</span>, <span class='number'>7331</span>,
<span class='number'>7333</span>, <span class='number'>7349</span>, <span class='number'>7351</span>, <span class='number'>7369</span>, <span class='number'>7393</span>, <span class='number'>7411</span>, <span class='number'>7417</span>, <span class='number'>7433</span>, <span class='number'>7451</span>, <span class='number'>7457</span>,
<span class='number'>7459</span>, <span class='number'>7477</span>, <span class='number'>7481</span>, <span class='number'>7487</span>, <span class='number'>7489</span>, <span class='number'>7499</span>, <span class='number'>7507</span>, <span class='number'>7517</span>, <span class='number'>7523</span>, <span class='number'>7529</span>,
<span class='number'>7537</span>, <span class='number'>7541</span>, <span class='number'>7547</span>, <span class='number'>7549</span>, <span class='number'>7559</span>, <span class='number'>7561</span>, <span class='number'>7573</span>, <span class='number'>7577</span>, <span class='number'>7583</span>, <span class='number'>7589</span>,
<span class='number'>7591</span>, <span class='number'>7603</span>, <span class='number'>7607</span>, <span class='number'>7621</span>, <span class='number'>7639</span>, <span class='number'>7643</span>, <span class='number'>7649</span>, <span class='number'>7669</span>, <span class='number'>7673</span>, <span class='number'>7681</span>,
<span class='number'>7687</span>, <span class='number'>7691</span>, <span class='number'>7699</span>, <span class='number'>7703</span>, <span class='number'>7717</span>, <span class='number'>7723</span>, <span class='number'>7727</span>, <span class='number'>7741</span>, <span class='number'>7753</span>, <span class='number'>7757</span>,
<span class='number'>7759</span>, <span class='number'>7789</span>, <span class='number'>7793</span>, <span class='number'>7817</span>, <span class='number'>7823</span>, <span class='number'>7829</span>, <span class='number'>7841</span>, <span class='number'>7853</span>, <span class='number'>7867</span>, <span class='number'>7873</span>,
<span class='number'>7877</span>, <span class='number'>7879</span>, <span class='number'>7883</span>, <span class='number'>7901</span>, <span class='number'>7907</span>, <span class='number'>7919</span>];
<span class='doccomment'>/// An arbitrarily-length prime number, suitable for cryptographic purposes.</span>
<span class='doccomment'>///</span>
@ -412,7 +508,7 @@
<span class='ident'>NewtypeBitAnd</span>(<span class='ident'>Int</span>), <span class='ident'>NewtypeBitOr</span>, <span class='ident'>NewtypeBitOr</span>(<span class='ident'>Int</span>), <span class='ident'>NewtypeBitXor</span>,
<span class='ident'>NewtypeBitXor</span>(<span class='ident'>Int</span>)
)]</span>
<span class='kw'>pub</span> <span class='kw'>struct</span> <span class='ident'>Prime</span>(<span class='ident'>Int</span>);
<span class='kw'>pub</span> <span class='kw'>struct</span> <span class='ident'>Prime</span>(<span class='ident'>Int</span>);
}
<span class='kw'>impl</span> <span class='ident'>Prime</span> {
@ -426,9 +522,9 @@
<span class='macro'>debug_assert</span><span class='macro'>!</span>(<span class='ident'>bit_length</span> <span class='op'>&gt;=</span> <span class='number'>512</span>);
<span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>rngesus</span> <span class='op'>=</span> <span class='kw'>match</span> <span class='ident'>OsRng</span>::<span class='ident'>new</span>() {
<span class='prelude-val'>Ok</span>(<span class='ident'>rng</span>) <span class='op'>=&gt;</span> <span class='ident'>rng</span>,
<span class='prelude-val'>Err</span>(<span class='ident'>reason</span>) <span class='op'>=&gt;</span> <span class='macro'>panic</span><span class='macro'>!</span>(<span class='string'>&quot;Error initializing RNG: {}&quot;</span>, <span class='ident'>reason</span>)
<span class='prelude-val'>Err</span>(<span class='ident'>reason</span>) <span class='op'>=&gt;</span> <span class='macro'>panic</span><span class='macro'>!</span>(<span class='string'>&quot;Error initializing RNG: {}&quot;</span>, <span class='ident'>reason</span>),
};
<span class='ident'>Prime</span>::<span class='ident'>from_rng</span>(<span class='ident'>bit_length</span>, <span class='kw-2'>&amp;</span><span class='kw-2'>mut</span> <span class='ident'>rngesus</span>)
}
@ -438,7 +534,7 @@
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>from_rng</span>(<span class='ident'>bit_length</span>: <span class='ident'>usize</span>, <span class='ident'>rngesus</span>: <span class='kw-2'>&amp;</span><span class='kw-2'>mut</span> <span class='ident'>OsRng</span>) <span class='op'>-&gt;</span> <span class='ident'>Prime</span> {
<span class='macro'>debug_assert</span><span class='macro'>!</span>(<span class='ident'>bit_length</span> <span class='op'>&gt;=</span> <span class='number'>512</span>);
<span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>candidate</span>: <span class='ident'>Int</span>;
<span class='comment'>// In order to remove as much bias from the system as possible, test</span>
<span class='comment'>// 500 potential candidates at a time before re-seeding the candidate</span>
<span class='comment'>// with a new random number.</span>
@ -478,6 +574,35 @@
}
}
<span class='kw'>fn</span> <span class='ident'>mod_exp</span>(<span class='ident'>base</span>: <span class='kw-2'>&amp;</span><span class='ident'>Int</span>, <span class='ident'>exponent</span>: <span class='kw-2'>&amp;</span><span class='ident'>Int</span>, <span class='ident'>modulus</span>: <span class='kw-2'>&amp;</span><span class='ident'>Int</span>) <span class='op'>-&gt;</span> <span class='ident'>Int</span> {
<span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>result</span> <span class='op'>=</span> <span class='ident'>Int</span>::<span class='ident'>one</span>();
<span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>base</span> <span class='op'>=</span> <span class='ident'>base</span>.<span class='ident'>clone</span>();
<span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>exponent</span> <span class='op'>=</span> <span class='ident'>exponent</span>.<span class='ident'>clone</span>();
<span class='kw'>while</span> <span class='ident'>exponent</span> <span class='op'>&gt;</span> <span class='number'>0_usize</span> {
<span class='kw'>if</span> <span class='kw-2'>&amp;</span><span class='ident'>exponent</span> <span class='kw-2'>&amp;</span> <span class='number'>1_usize</span> <span class='op'>==</span> <span class='number'>1_usize</span> {
<span class='ident'>result</span> <span class='op'>=</span> (<span class='kw-2'>&amp;</span><span class='ident'>base</span> <span class='op'>*</span> <span class='ident'>result</span>) <span class='op'>%</span> <span class='ident'>modulus</span>;
}
<span class='ident'>base</span> <span class='op'>=</span> (<span class='kw-2'>&amp;</span><span class='ident'>base</span>.<span class='ident'>pow</span>(<span class='number'>2</span>)) <span class='op'>%</span> <span class='ident'>modulus</span>;
<span class='ident'>exponent</span> <span class='op'>=</span> <span class='kw-2'>&amp;</span><span class='ident'>exponent</span> <span class='op'>&gt;&gt;</span> <span class='number'>1</span>;
}
<span class='ident'>result</span>
}
<span class='kw'>fn</span> <span class='ident'>rewrite</span>(<span class='ident'>candidate</span>: <span class='kw-2'>&amp;</span><span class='ident'>Int</span>) <span class='op'>-&gt;</span> (<span class='ident'>Int</span>, <span class='ident'>Int</span>) {
<span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>d</span> <span class='op'>=</span> <span class='ident'>candidate</span> <span class='op'>-</span> <span class='number'>1_usize</span>;
<span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>s</span> <span class='op'>=</span> <span class='ident'>Int</span>::<span class='ident'>zero</span>();
<span class='kw'>while</span> <span class='kw-2'>&amp;</span><span class='ident'>d</span> <span class='kw-2'>&amp;</span> <span class='number'>1</span> <span class='op'>==</span> <span class='number'>1_usize</span> {
<span class='ident'>d</span> <span class='op'>=</span> <span class='kw-2'>&amp;</span><span class='ident'>d</span> <span class='op'>&gt;&gt;</span> <span class='number'>1_usize</span>;
<span class='ident'>s</span> <span class='op'>=</span> <span class='kw-2'>&amp;</span><span class='ident'>s</span> <span class='op'>+</span> <span class='number'>1_usize</span>;
}
(<span class='ident'>s</span>, <span class='ident'>d</span>)
}
<span class='kw'>fn</span> <span class='ident'>is_prime</span>(<span class='ident'>candidate</span>: <span class='kw-2'>&amp;</span><span class='ident'>Int</span>) <span class='op'>-&gt;</span> <span class='ident'>bool</span> {
<span class='comment'>// First, iterate through the array of small primes and divide the</span>
<span class='comment'>// candidate. If the candidate divides any of them, then we know the number</span>
@ -514,11 +639,7 @@
<span class='kw'>let</span> <span class='ident'>result</span> <span class='op'>=</span> <span class='ident'>mod_exp</span>(<span class='kw-2'>&amp;</span><span class='ident'>random</span>, <span class='kw-2'>&amp;</span>(<span class='ident'>candidate</span> <span class='op'>-</span> <span class='number'>1_usize</span>), <span class='ident'>candidate</span>);
<span class='kw'>if</span> <span class='ident'>result</span> <span class='op'>==</span> <span class='number'>1_usize</span> {
<span class='boolval'>true</span>
} <span class='kw'>else</span> {
<span class='boolval'>false</span>
}
<span class='ident'>result</span> <span class='op'>==</span> <span class='number'>1_usize</span>
}
<span class='kw'>fn</span> <span class='ident'>miller_rabin</span>(<span class='ident'>candidate</span>: <span class='kw-2'>&amp;</span><span class='ident'>Int</span>) <span class='op'>-&gt;</span> <span class='ident'>bool</span> {
@ -532,7 +653,7 @@
<span class='kw'>if</span> <span class='ident'>x</span> <span class='op'>==</span> <span class='number'>1_usize</span> <span class='op'>||</span> <span class='ident'>x</span> <span class='op'>==</span> (<span class='ident'>candidate</span> <span class='op'>-</span> <span class='number'>1_usize</span>) {
<span class='kw'>continue</span>;
} <span class='kw'>else</span> {
<span class='kw'>for</span> _ <span class='kw'>in</span> <span class='ident'>Int</span>::<span class='ident'>one</span>() .. <span class='ident'>s</span> <span class='op'>-</span> <span class='number'>1_usize</span> {
<span class='kw'>for</span> _ <span class='kw'>in</span> <span class='ident'>Int</span>::<span class='ident'>one</span>()..<span class='ident'>s</span> <span class='op'>-</span> <span class='number'>1_usize</span> {
<span class='ident'>x</span> <span class='op'>=</span> <span class='ident'>mod_exp</span>(<span class='kw-2'>&amp;</span><span class='ident'>x</span>, <span class='kw-2'>&amp;</span><span class='ident'>Int</span>::<span class='ident'>from</span>(<span class='number'>2</span>), <span class='ident'>candidate</span>);
<span class='kw'>if</span> <span class='ident'>x</span> <span class='op'>==</span> <span class='number'>1_usize</span> {
<span class='kw'>return</span> <span class='boolval'>false</span>;
@ -547,33 +668,32 @@
<span class='boolval'>true</span>
}
<span class='kw'>fn</span> <span class='ident'>mod_exp</span>(<span class='ident'>base</span>: <span class='kw-2'>&amp;</span><span class='ident'>Int</span>, <span class='ident'>exponent</span>: <span class='kw-2'>&amp;</span><span class='ident'>Int</span>, <span class='ident'>modulus</span>: <span class='kw-2'>&amp;</span><span class='ident'>Int</span>) <span class='op'>-&gt;</span> <span class='ident'>Int</span> {
<span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>result</span> <span class='op'>=</span> <span class='ident'>Int</span>::<span class='ident'>one</span>();
<span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>base</span> <span class='op'>=</span> <span class='ident'>base</span>.<span class='ident'>clone</span>();
<span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>exponent</span> <span class='op'>=</span> <span class='ident'>exponent</span>.<span class='ident'>clone</span>();
<span class='attribute'>#[<span class='ident'>cfg</span>(<span class='ident'>test</span>)]</span>
<span class='kw'>mod</span> <span class='ident'>tests</span> {
<span class='kw'>use</span> <span class='ident'>ramp</span>::<span class='ident'>Int</span>;
<span class='kw'>use</span> <span class='kw'>super</span>::{<span class='ident'>fermat</span>, <span class='ident'>miller_rabin</span>};
<span class='kw'>while</span> <span class='ident'>exponent</span> <span class='op'>&gt;</span> <span class='number'>0_usize</span> {
<span class='kw'>if</span> <span class='kw-2'>&amp;</span><span class='ident'>exponent</span> <span class='kw-2'>&amp;</span> <span class='number'>1_usize</span> <span class='op'>==</span> <span class='number'>1_usize</span> {
<span class='ident'>result</span> <span class='op'>=</span> (<span class='kw-2'>&amp;</span><span class='ident'>base</span> <span class='op'>*</span> <span class='ident'>result</span>) <span class='op'>%</span> <span class='ident'>modulus</span>;
}
<span class='ident'>base</span> <span class='op'>=</span> (<span class='kw-2'>&amp;</span><span class='ident'>base</span>.<span class='ident'>pow</span>(<span class='number'>2</span>)) <span class='op'>%</span> <span class='ident'>modulus</span>;
<span class='ident'>exponent</span> <span class='op'>=</span> <span class='kw-2'>&amp;</span><span class='ident'>exponent</span> <span class='op'>&gt;&gt;</span> <span class='number'>1</span>;
<span class='attribute'>#[<span class='ident'>test</span>]</span>
<span class='kw'>fn</span> <span class='ident'>test_fermat_pass</span>() {
<span class='macro'>assert</span><span class='macro'>!</span>(<span class='ident'>fermat</span>(<span class='kw-2'>&amp;</span><span class='ident'>Int</span>::<span class='ident'>from</span>(<span class='number'>7919</span>)));
}
<span class='ident'>result</span>
}
<span class='kw'>fn</span> <span class='ident'>rewrite</span>(<span class='ident'>candidate</span>: <span class='kw-2'>&amp;</span><span class='ident'>Int</span>) <span class='op'>-&gt;</span> (<span class='ident'>Int</span>, <span class='ident'>Int</span>) {
<span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>d</span> <span class='op'>=</span> <span class='ident'>candidate</span> <span class='op'>-</span> <span class='number'>1_usize</span>;
<span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>s</span> <span class='op'>=</span> <span class='ident'>Int</span>::<span class='ident'>zero</span>();
<span class='kw'>while</span> <span class='kw-2'>&amp;</span><span class='ident'>d</span> <span class='kw-2'>&amp;</span> <span class='number'>1</span> <span class='op'>==</span> <span class='number'>1_usize</span> {
<span class='ident'>d</span> <span class='op'>=</span> <span class='kw-2'>&amp;</span><span class='ident'>d</span> <span class='op'>&gt;&gt;</span> <span class='number'>1_usize</span>;
<span class='ident'>s</span> <span class='op'>=</span> <span class='kw-2'>&amp;</span><span class='ident'>s</span> <span class='op'>+</span> <span class='number'>1_usize</span>;
<span class='attribute'>#[<span class='ident'>test</span>]</span>
<span class='attribute'>#[<span class='ident'>should_panic</span>]</span>
<span class='kw'>fn</span> <span class='ident'>test_fermat_fail</span>() {
<span class='macro'>assert</span><span class='macro'>!</span>(<span class='ident'>fermat</span>(<span class='kw-2'>&amp;</span><span class='ident'>Int</span>::<span class='ident'>from</span>(<span class='number'>7920</span>)));
}
(<span class='ident'>s</span>, <span class='ident'>d</span>)
<span class='attribute'>#[<span class='ident'>test</span>]</span>
<span class='kw'>fn</span> <span class='ident'>test_miller_rabin_pass</span>() {
<span class='macro'>assert</span><span class='macro'>!</span>(<span class='ident'>miller_rabin</span>(<span class='kw-2'>&amp;</span><span class='ident'>Int</span>::<span class='ident'>from</span>(<span class='number'>7919</span>)));
}
<span class='attribute'>#[<span class='ident'>test</span>]</span>
<span class='attribute'>#[<span class='ident'>should_panic</span>]</span>
<span class='kw'>fn</span> <span class='ident'>test_miller_rabin_fail</span>() {
<span class='macro'>assert</span><span class='macro'>!</span>(<span class='ident'>miller_rabin</span>(<span class='kw-2'>&amp;</span><span class='ident'>Int</span>::<span class='ident'>from</span>(<span class='number'>7920</span>)));
}
}
</pre>
</section>