From 10e372f2f921a7126a883b3281dd5f3255e81fe4 Mon Sep 17 00:00:00 2001 From: Coin de Gamma Date: Sun, 26 Feb 2023 22:35:35 +0000 Subject: [PATCH] bugget 003, but ok --- 003/solution.rs | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 003/solution.rs diff --git a/003/solution.rs b/003/solution.rs new file mode 100644 index 0000000..80be906 --- /dev/null +++ b/003/solution.rs @@ -0,0 +1,45 @@ +// sqrt(600_851_475_143) = 775146.09922 ~= 775147 + +fn get_sqrt_ceil(x: u64) -> u64 { + let xf: f64 = x as f64; + let sq: f64 = xf.sqrt().ceil(); + let res: u64 = sq as u64; + return res; +} + +fn get_biggest_div(n: u64) -> u64 { + // println!("get_biggest_div from {}", n); + let mut d: u64 = 1u64; + let sq = get_sqrt_ceil(n); + for k in 2u64..=sq { + if n % k == 0 { d = k; } + } + if d == 1 { return n; } + let dd = get_biggest_div(n / d); + if dd > d { + return dd; + } else { + return d; + } +} + +fn find_biggest_prime_div(n: u64) -> u64 { + let biggest_div = get_biggest_div(n); + if biggest_div == n { + return n; + } + let p = find_biggest_prime_div(biggest_div); + let q = find_biggest_prime_div(n / biggest_div); + if p > q { + return p; + } else { + return q; + } +} + + +fn main() { + //let r = find_biggest_prime_div(600_851_475_143); + let r = find_biggest_prime_div(600_851_475_143); + println!("{}", r); +}