Ormiston pairs: Difference between revisions

Added Rust solution
(Added Rust solution)
Line 578:
382 Ormiston pairs before one million
3722 Ormiston pairs before ten million</pre>
 
=={{header|Rust}}==
<syntaxhighlight lang="rust">// [dependencies]
// primal = "0.3"
 
fn get_digits(mut n: usize) -> [usize; 10] {
let mut digits = [0; 10];
while n > 0 {
digits[n % 10] += 1;
n /= 10;
}
digits
}
 
fn ormiston_pairs() -> impl std::iter::Iterator<Item = (usize, usize)> {
let mut digits = [0; 10];
let mut prime = 0;
let mut primes = primal::Primes::all();
std::iter::from_fn(move || {
for p in primes.by_ref() {
let prime0 = prime;
prime = p;
let digits0 = digits;
digits = get_digits(prime);
if digits == digits0 {
return Some((prime0, prime));
}
}
None
})
}
 
fn main() {
let mut count = 0;
let mut op = ormiston_pairs();
println!("First 30 Ormiston pairs:");
for (p1, p2) in op.by_ref() {
count += 1;
let c = if count % 3 == 0 { '\n' } else { ' ' };
print!("({:5}, {:5}){}", p1, p2, c);
if count == 30 {
break;
}
}
println!();
let mut limit = 1000000;
for (p1, _) in op.by_ref() {
if p1 > limit {
println!("Number of Ormiston pairs < {}: {}", limit, count);
limit *= 10;
if limit == 10000000000 {
break;
}
}
count += 1;
}
}</syntaxhighlight>
 
{{out}}
<pre>
First 30 Ormiston pairs:
( 1913, 1931) (18379, 18397) (19013, 19031)
(25013, 25031) (34613, 34631) (35617, 35671)
(35879, 35897) (36979, 36997) (37379, 37397)
(37813, 37831) (40013, 40031) (40213, 40231)
(40639, 40693) (45613, 45631) (48091, 48109)
(49279, 49297) (51613, 51631) (55313, 55331)
(56179, 56197) (56713, 56731) (58613, 58631)
(63079, 63097) (63179, 63197) (64091, 64109)
(65479, 65497) (66413, 66431) (74779, 74797)
(75913, 75931) (76213, 76231) (76579, 76597)
 
Number of Ormiston pairs < 1000000: 382
Number of Ormiston pairs < 10000000: 3722
Number of Ormiston pairs < 100000000: 34901
Number of Ormiston pairs < 1000000000: 326926
</pre>
 
=={{header|Wren}}==
1,777

edits