You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
1.2 KiB
62 lines
1.2 KiB
use std::collections::HashSet; |
|
|
|
struct PN { |
|
a: u32, |
|
b: u32, |
|
ps: String, |
|
} |
|
|
|
impl PN { |
|
fn new(a: u32, b: u32) -> PN { |
|
PN { a, b, ps: String::new() } |
|
} |
|
|
|
fn simplify(&mut self, ps: &Vec<u32> ) { |
|
let mut n = self.a; |
|
for p in ps { |
|
let mut k = 0; |
|
while n % p == 0 { k += 1; n /= p; } |
|
k *= self.b; |
|
if k > 0 { |
|
self.ps += &format!("{},{}.", p, k); |
|
} |
|
} |
|
} |
|
} |
|
|
|
fn er() -> Vec<u32> { |
|
let mut ns = Vec::new(); |
|
let mut res = Vec::new(); |
|
for _i in 0..=100 { ns.push(true); } |
|
let mut k = 1; |
|
loop { |
|
let mut found_next_k = false; |
|
for j in k + 1..=100 { if ns[j] { k = j; found_next_k = true; break; } } |
|
if !found_next_k { break; } |
|
res.push(k as u32); |
|
for i in (k+k..=100).step_by(k) { ns[i] = false } |
|
} |
|
|
|
return res; |
|
} |
|
|
|
fn main() { |
|
let mut hs = HashSet::new(); |
|
let ps = er(); |
|
for p in &ps { print!("{} ", p); } |
|
println!(""); |
|
|
|
for a in 2..=100 { |
|
for b in 2..=100 { |
|
let mut pn = PN::new(a, b); |
|
pn.simplify(&ps); |
|
//println!("{}", pn.ps); |
|
hs.insert(pn.ps); |
|
} |
|
} |
|
|
|
println!("{}", hs.len()); |
|
|
|
|
|
} |
|
|
|
|