chore: First rust lines

This commit is contained in:
2026-08-18 21:49:46 +01:00
commit a8707abd3e
4 changed files with 96 additions and 0 deletions
+1
View File
@@ -0,0 +1 @@
/target
Generated
+7
View File
@@ -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"
+6
View File
@@ -0,0 +1,6 @@
[package]
name = "ddsprs"
version = "0.1.0"
edition = "2024"
[dependencies]
+82
View File
@@ -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<Vec<u64>> {
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;
}