From a8707abd3e82cf065c77fc0bdbe726e4463872fb Mon Sep 17 00:00:00 2001 From: Diogo Diniz Date: Tue, 18 Aug 2026 21:49:46 +0100 Subject: [PATCH] chore: First rust lines --- .gitignore | 1 + Cargo.lock | 7 +++++ Cargo.toml | 6 ++++ src/main.rs | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 96 insertions(+) create mode 100644 .gitignore create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 src/main.rs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..4afe312 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "ddsprs" +version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..61ec981 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "ddsprs" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..d32f0b5 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,82 @@ +use std::fs::File; +use std::io::Read; + +fn main() { + for n in 1..=100 { + if isprime_trial(n) { + println!("{} is prime", n) + } + } + + let res = load_ncc_known_primes("/home/didas/Downloads/known_primes.res").unwrap(); + + println!("Got {:x}", res[0]); +} + +fn load_ncc_known_primes(path: &str) -> Option> { + let mut file = File::open(&path).ok()?; + println!("Open"); + let mut buf: [u8; 8] = [0u8; 8]; + let read = file.read(&mut buf).ok()?; + if read != 8 { + panic!(); + } + + if buf[0] != 1 || buf[1] != 2 || buf[2] != 0 || buf[3] != 2 { + return None; + } + + let prime_count = u32::from_le_bytes(buf[4..8]); + println!("Found {} primes", prime_count); + + let mut vec = Vec::new(); + vec.push(0); + + return Some(vec); +} + +fn isprime_trial(num: u64) -> bool { + if num < 2 { + return false; + } + + if num < 4 { + return true; + } + + if (num % 2) == 0 { + return false; + } + + let sqrt = sqrt_u64(num); + + let mut divider = 3; + + while divider <= sqrt { + if (num % divider) == 0 { + return false; + } + + divider += 2; + } + + return true; +} + +fn sqrt_u64(num: u64) -> u64 { + let mut lo = 0; + let mut hi = u32::MAX as u64; + + while lo < hi { + let mid = lo + (hi - lo) / 2; + let guess = mid * mid; + + if guess >= num { + hi = mid; + } else { + lo = mid + 1; + } + } + + return lo; +}