From 57ba9d2f04de4b0ce2705056f1a4881f3e16dbdb Mon Sep 17 00:00:00 2001 From: Coin de Gamma Date: Sun, 5 Mar 2023 08:02:51 +0000 Subject: [PATCH] 012 begin --- 012/.gitignore | 3 +++ 012/README.md | 5 +++++ 012/compute_primes.rs | 36 ++++++++++++++++++++++++++++++++++++ 012/main.rs | 34 ++++++++++++++++++++++++++++++++++ 012/main_basic.rs | 26 ++++++++++++++++++++++++++ 5 files changed, 104 insertions(+) create mode 100644 012/.gitignore create mode 100644 012/README.md create mode 100644 012/compute_primes.rs create mode 100644 012/main.rs create mode 100644 012/main_basic.rs diff --git a/012/.gitignore b/012/.gitignore new file mode 100644 index 0000000..674767c --- /dev/null +++ b/012/.gitignore @@ -0,0 +1,3 @@ +primes.txt +compute_primes +main_basic diff --git a/012/README.md b/012/README.md new file mode 100644 index 0000000..d0448ca --- /dev/null +++ b/012/README.md @@ -0,0 +1,5 @@ +Generate primes list before execution + +``` +rustc compute_primes.rs && ./compute_primes > primes.txt +``` diff --git a/012/compute_primes.rs b/012/compute_primes.rs new file mode 100644 index 0000000..a35f356 --- /dev/null +++ b/012/compute_primes.rs @@ -0,0 +1,36 @@ +const SIZE: usize = 1500000; +type Rs = [bool; SIZE + 1]; + +fn remove_divs(m: usize, xs: &mut Rs) { + let mut i = m + m; + while i <= SIZE { + xs[i] = false; + i += m; + } +} + +fn get_next_p(m_from: usize, xs: &Rs) -> Option { + for k in (m_from + 1)..=SIZE { + if xs[k] { return Some(k); } + } + return None; +} + +fn main() { + let mut xs: Rs = [true; SIZE + 1]; + let mut q: usize = 1; + let mut count = 0; + loop { + match get_next_p(q, &xs) { + Some(p) => { + q = p; + count += 1; + println!("{}", p); + if count == 500 { break; } + }, + None => break + } + remove_divs(q, &mut xs); + } + // println!("[{}]: {}", count, q); +} diff --git a/012/main.rs b/012/main.rs new file mode 100644 index 0000000..e208e99 --- /dev/null +++ b/012/main.rs @@ -0,0 +1,34 @@ +use std::fs::File; +use std::io::{ self, BufRead, BufReader }; + + +const PS_SIZE: usize = 500usize; + +fn get_ps() -> Vec { + let file = File::open("primes.txt").unwrap(); + let lines = io::BufReader::new(file).lines(); + return lines.map(|line| line.unwrap().parse::().unwrap()) + .collect(); +} + +fn divs_num_test(n: u32) -> u32 { + let mut res = 0; + for i in 1..n { + if n % i == 0 { res += 1; } + } + return res; +} + +fn main() { + let ps = get_ps(); + let mut n = 1; + let mut best_dn = 1; + for k in 2..50000 { + n += k; + let dn = 500; //500; //divs_num(n); + //if dn > best_dn { + // best_dn = dn; + //println!("[{}]{}:{}",k, n, dn); + //} + } +} diff --git a/012/main_basic.rs b/012/main_basic.rs new file mode 100644 index 0000000..bf1cdc9 --- /dev/null +++ b/012/main_basic.rs @@ -0,0 +1,26 @@ +use std::fs::File; +use std::io::{ self, BufRead, BufReader }; + +const PS_SIZE: usize = 500usize; + + +fn divs_num(n: u32) -> u32 { + let mut res = 0; + for i in 1..n { + if n % i == 0 { res += 1; } + } + return res; +} + +fn main() { + let mut n = 1; + let mut best_dn = 1; + for k in 2..50000 { + n += k; + let dn = divs_num(n); + if dn > best_dn { + best_dn = dn; + println!("[{}]{}:{}",k, n, dn); + } + } +}