From 898dbb40d9df0070874aeba944e3c47905186e60 Mon Sep 17 00:00:00 2001 From: William Ball Date: Sun, 12 Jul 2020 15:45:42 -0700 Subject: [PATCH] looking for large prime sequences; > 10,000,000 --- append_digit_primes/src/main.rs | 5 +- cpp/a.out | Bin 0 -> 101520 bytes cpp/append_digit_primes.cpp | 103 ++++++++++++++++++++++++++++++++ 3 files changed, 106 insertions(+), 2 deletions(-) create mode 100755 cpp/a.out create mode 100644 cpp/append_digit_primes.cpp diff --git a/append_digit_primes/src/main.rs b/append_digit_primes/src/main.rs index 3e0a9f4..604bd5c 100644 --- a/append_digit_primes/src/main.rs +++ b/append_digit_primes/src/main.rs @@ -70,10 +70,11 @@ fn step(x: u64) -> Vec { } fn main() { - let mut tree = Tree::new(0, vec![2, 3, 5, 7]); + let primes: Vec = primal::Primes::all().skip_while(|x| *x < 10_000_000).take_while(|x| *x < 100_000_000).map(|x| x as u64).collect(); + let mut tree = Tree::new(0, primes); for _ in 0..20 { tree.step(); println!("{:?}", tree.longest_path()); } - println!("{}", tree.to_string()); + //println!("{}", tree.to_string()); } diff --git a/cpp/a.out b/cpp/a.out new file mode 100755 index 0000000000000000000000000000000000000000..b86fe2a7584a2824947aab4c1e0646393bb782a7 GIT binary patch literal 101520 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 +#include +#include +#include + +using ull = unsigned long long; + +auto next(ull x) -> std::vector; +auto is_prime(ull n) -> bool; + +class Tree +{ +public: + ull value; + std::vector children; + + Tree(ull value, std::vector tree_children) : value(value) { + for (ull child : tree_children) { + children.push_back(Tree(child, {})); + } + } + + void step() { + if (children.size() == 0) { + auto xs = next(value); + for (auto val : xs) { + children.push_back(Tree(val, {})); + } + return; + } + for (auto &child : children) { + child.step(); + } + } + + auto longest_path() -> std::vector { + if (children.size() == 0) { + return { value }; + } + std::vector max_path; + int max_length = 0; + for (auto &child : children) { + auto temp = child.longest_path(); + if (temp.size() > max_length) { + max_length = temp.size(); + max_path = temp; + } + } + std::vector retval = { value }; + retval.insert(retval.end(), max_path.begin(), max_path.end()); + return retval; + } +}; + +auto next(ull x) -> std::vector { + std::vector new_xs = {}; + ull temp = x * 10; + for (int i = 0; i < 10; i++) { + auto temp2 = temp + i; + if (is_prime(temp2)) { + new_xs.push_back(temp2); + } + } + return new_xs; +} + +auto is_prime(ull n) -> bool { + static std::unordered_map primes; + if (primes.count(n) > 0) { + return primes[n]; + } + for (int i = 2; i * i <= n; i++) { + if (n % i == 0) { + primes[n] = false; + return false; + } + } + primes[n] = true; + return true; +} + +template +auto print_vec(std::vector vec) -> void { + std::cout << '['; + for (T &val : vec) { + std::cout << val << ", "; + } + std::cout << "]\n"; +} + +auto main() -> int { + std::vector primes; + for (int i = 2; i < 10000000; i++) { + if (is_prime(i)) { + primes.push_back(i); + } + } + Tree tree(0, primes); + for (int i = 0; i < 200; i++) { + tree.step(); + print_vec(tree.longest_path()); + } +}