From f1b1389093c0618da9e0ef67ab282b41ae882816 Mon Sep 17 00:00:00 2001 From: ache Date: Fri, 13 Sep 2019 01:15:58 +0200 Subject: Problem 357 --- p357/Cargo.lock | 6 ++++++ p357/Cargo.toml | 9 +++++++++ p357/src/erasto.c | 30 ++++++++++++++++++++++++++++++ p357/src/main.rs | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 97 insertions(+) create mode 100644 p357/Cargo.lock create mode 100644 p357/Cargo.toml create mode 100644 p357/src/erasto.c create mode 100644 p357/src/main.rs diff --git a/p357/Cargo.lock b/p357/Cargo.lock new file mode 100644 index 0000000..e03ab4d --- /dev/null +++ b/p357/Cargo.lock @@ -0,0 +1,6 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +[[package]] +name = "euler_357" +version = "0.1.0" + diff --git a/p357/Cargo.toml b/p357/Cargo.toml new file mode 100644 index 0000000..a756b71 --- /dev/null +++ b/p357/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "euler_357" +version = "0.1.0" +authors = ["ache "] +edition = "2018" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/p357/src/erasto.c b/p357/src/erasto.c new file mode 100644 index 0000000..d11b52e --- /dev/null +++ b/p357/src/erasto.c @@ -0,0 +1,30 @@ +#include +#include +#include +#include + +const MAX_PRIMES = 100010000; +const SQRT_MAX_PRIMES = 10000; + +int main(int argc, char* argv[]) { + bool* primes = calloc(MAX_PRIMES, sizeof(bool)); + memset(primes, true, MAX_PRIMES); + + + primes[0] = false; + primes[1] = false; + + for( int i = 2 ; i < SQRT_MAX_PRIMES ; i++) { + if(primes[i]) { + for( int j = i*i ; j < MAX_PRIMES ; j+=i) { + primes[j] = false; + } + } + } + + size_t cnt = 0; + for( int i = 0 ; i < MAX_PRIMES ; i++) + if(primes[i]) cnt++; + printf("Count is : %zu\n", cnt); +} + diff --git a/p357/src/main.rs b/p357/src/main.rs new file mode 100644 index 0000000..14a5d02 --- /dev/null +++ b/p357/src/main.rs @@ -0,0 +1,52 @@ +const MAX_PRIMES: usize = 200_000_000; +const MAX_DIV_PRIMES: usize = 100_000_000; +const SQRT_MAX_PRIMES: usize = 14_142; + +fn main() { + let mut primes = vec![true;MAX_PRIMES]; + + primes[0] = false; + primes[1] = false; + + for i in 2..SQRT_MAX_PRIMES { + if primes[i] { + let mut j = i*i; + while j < MAX_PRIMES { + primes[j] = false; + j += i; + } + } + } + + let mut cnt = 0; + for i in &primes { + if *i { + cnt += 1; + } + } + println!("Count is {}", cnt); + + let mut sum: u64 = 0; + for i in 1..MAX_DIV_PRIMES { + if primes[i+1] { + let mut ok = true; + + let mut j = 1; + while j*j <= i { + if i % j == 0 { + if !primes[j + i/j] { + ok = false; + break; + } + } + j += 1; + } + if ok { + sum += i as u64; + } + } + } + println!("Sum is {}", sum); + + +} -- cgit v1.2.3