This commit is contained in:
Rachel Lambda Samuelsson 2024-10-13 22:42:52 +02:00
commit 44ec170681
7 changed files with 190 additions and 0 deletions

1
.envrc Normal file
View File

@ -0,0 +1 @@
use flake

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
target/
.direnv

7
Cargo.lock generated Normal file
View File

@ -0,0 +1,7 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
[[package]]
name = "primes"
version = "0.1.0"

8
Cargo.toml Normal file
View File

@ -0,0 +1,8 @@
[package]
name = "primes"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]

79
flake.lock Normal file
View File

@ -0,0 +1,79 @@
{
"nodes": {
"flake-utils": {
"inputs": {
"systems": "systems"
},
"locked": {
"lastModified": 1726560853,
"narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1719145550,
"narHash": "sha256-K0i/coxxTEl30tgt4oALaylQfxqbotTSNb1/+g+mKMQ=",
"path": "/nix/store/h5hhc58qp2rcv0f3d9di6569pxrpsi1j-source",
"rev": "e4509b3a560c87a8d4cb6f9992b8915abf9e36d8",
"type": "path"
},
"original": {
"id": "nixpkgs",
"type": "indirect"
}
},
"root": {
"inputs": {
"flake-utils": "flake-utils",
"nixpkgs": "nixpkgs",
"rust-overlay": "rust-overlay"
}
},
"rust-overlay": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1728786660,
"narHash": "sha256-qY+1e0o6oV5ySlErhj/dsWsPLWjrMKzq4QI7a1t9/Ps=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "174a8d9cec9e2c23877a7b887c52b68ef0421d8b",
"type": "github"
},
"original": {
"owner": "oxalica",
"repo": "rust-overlay",
"type": "github"
}
},
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
}
},
"root": "root",
"version": 7
}

36
flake.nix Normal file
View File

@ -0,0 +1,36 @@
{
description = "A bare minimum Rust flake";
inputs = {
flake-utils.url = "github:numtide/flake-utils";
rust-overlay = {
url = "github:oxalica/rust-overlay";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = { self, nixpkgs, flake-utils, rust-overlay }:
flake-utils.lib.eachDefaultSystem (sys:
let pkgs = import nixpkgs {
system = sys;
overlays = [ (import rust-overlay) ];
};
rust = pkgs.rust-bin.stable.latest.default.override {
extensions = [ "rust-src" "rust-analyzer" ];
};
platform = pkgs.makeRustPlatform {
rustc = rust;
cargo = rust;
};
in rec {
packages.default = platform.buildRustPackage {
name = "my-cool-project";
src = ./.;
cargoLock = { lockFile = ./Cargo.lock; };
};
devShells.default = pkgs.mkShell {
packages = [ rust ];
};
}
);
}

57
src/main.rs Normal file
View File

@ -0,0 +1,57 @@
use std::io;
fn sqrtu64(x: u64) -> u64 {
f64::sqrt(x as f64) as u64 + 1
}
fn main() {
let mut input_line = String::new();
io::stdin()
.read_line(&mut input_line)
.expect("Failed to read line");
let x: u64 = input_line.trim().parse().expect("Input not an integer");
let sqrtx = sqrtu64(x);
let mut primes = vec![2,3,5,7];
let mut i: u64 = 12;
while i <= sqrtx {
let n = i-1;
let m = i+1;
let sqrtm = sqrtu64(m);
let mut nprime = true;
let mut mprime = true;
for prime in &primes {
if *prime > sqrtm { break; }
if n % prime == 0 {
nprime = false;
break;
}
if m % prime == 0 {
mprime = false;
break;
}
}
if nprime { primes.push(n) }
if mprime { primes.push(m) }
i+=6;
}
let mut divisors: Vec<u64> = vec![];
for div in primes {
if x % div == 0 {
divisors.push(div);
}
}
if divisors.len() == 0 {
println!("{} is prime!", x);
} else {
println!("{} has divisors {:?}", x, divisors);
}
}