chore: First rust lines
This commit is contained in:
@@ -0,0 +1 @@
|
||||
/target
|
||||
Generated
+7
@@ -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"
|
||||
@@ -0,0 +1,6 @@
|
||||
[package]
|
||||
name = "ddsprs"
|
||||
version = "0.1.0"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
+82
@@ -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;
|
||||
}
|
||||
Reference in New Issue
Block a user