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