Wilson primes of order n: Difference between revisions
Content added Content deleted
(Added C++ solution) |
(Added Rust solution) |
||
Line 568: | Line 568: | ||
11 │ 17 2,713 |
11 │ 17 2,713 |
||
───────┴───────────────────────────────────────────────────────────── |
───────┴───────────────────────────────────────────────────────────── |
||
</pre> |
|||
=={{header|Rust}}== |
|||
<lang rust>// [dependencies] |
|||
// rug = "1.13.0" |
|||
use rug::Integer; |
|||
fn generate_primes(limit: usize) -> Vec<usize> { |
|||
let mut sieve = vec![true; limit >> 1]; |
|||
let mut p = 3; |
|||
let mut sq = p * p; |
|||
while sq < limit { |
|||
if sieve[p >> 1] { |
|||
let mut q = sq; |
|||
while q < limit { |
|||
sieve[q >> 1] = false; |
|||
q += p << 1; |
|||
} |
|||
} |
|||
sq += (p + 1) << 2; |
|||
p += 2; |
|||
} |
|||
let mut primes = Vec::new(); |
|||
if limit > 2 { |
|||
primes.push(2); |
|||
} |
|||
for i in 1..sieve.len() { |
|||
if sieve[i] { |
|||
primes.push((i << 1) + 1); |
|||
} |
|||
} |
|||
primes |
|||
} |
|||
fn factorials(limit: usize) -> Vec<Integer> { |
|||
let mut f = vec![Integer::from(1)]; |
|||
let mut factorial = Integer::from(1); |
|||
f.reserve(limit); |
|||
for i in 1..limit { |
|||
factorial *= i as u64; |
|||
f.push(factorial.clone()); |
|||
} |
|||
f |
|||
} |
|||
fn main() { |
|||
let limit = 11000; |
|||
let f = factorials(limit); |
|||
let primes = generate_primes(limit); |
|||
println!(" n | Wilson primes\n--------------------"); |
|||
let mut s = -1; |
|||
for n in 1..=11 { |
|||
print!("{:2} |", n); |
|||
for p in &primes { |
|||
if *p >= n { |
|||
let mut num = Integer::from(&f[n - 1] * &f[*p - n]); |
|||
num -= s; |
|||
if num % ((p * p) as u64) == 0 { |
|||
print!(" {}", p); |
|||
} |
|||
} |
|||
} |
|||
println!(); |
|||
s = -s; |
|||
} |
|||
}</lang> |
|||
{{out}} |
|||
<pre> |
|||
n | Wilson primes |
|||
-------------------- |
|||
1 | 5 13 563 |
|||
2 | 2 3 11 107 4931 |
|||
3 | 7 |
|||
4 | 10429 |
|||
5 | 5 7 47 |
|||
6 | 11 |
|||
7 | 17 |
|||
8 | |
|||
9 | 541 |
|||
10 | 11 1109 |
|||
11 | 17 2713 |
|||
</pre> |
</pre> |
||