From ae77f4109d4075be5daf859a5c2bbdd53ba045b7 Mon Sep 17 00:00:00 2001 From: Vishal Pankaj Chandratreya <19171016+tfpf@users.noreply.github.com> Date: Sat, 3 Feb 2024 20:59:59 +0530 Subject: [PATCH 1/4] Problem 70. --- README.md | 1 + src/main.rs | 1 + src/solutions.rs | 1 + src/solutions/totient_permutation.rs | 1 + 4 files changed, 4 insertions(+) create mode 100644 src/solutions/totient_permutation.rs diff --git a/README.md b/README.md index e9e4d0c8..82f66e9c 100644 --- a/README.md +++ b/README.md @@ -115,6 +115,7 @@ such as (but not limited to) Bard and ChatGPT. |[67](https://projecteuler.net/problem=67)|[`maximum_path_sum_ii.rs`](src/solutions/maximum_path_sum_ii.rs)| |[68](https://projecteuler.net/problem=68)|[`magic_5_gon_ring.rs`](src/solutions/magic_5_gon_ring.rs)| |[69](https://projecteuler.net/problem=69)|[`totient_maximum.rs`](src/solutions/totient_maximum.rs)| +|[70](https://projecteuler.net/problem=70)|[`totient_permutation.rs`](src/solutions/totient_permutation.rs)| |[74](https://projecteuler.net/problem=74)|[`digit_factorial_chains.rs`](src/solutions/digit_factorial_chains.rs)| |[75](https://projecteuler.net/problem=75)|[`singular_integer_right_triangles.rs`](src/solutions/singular_integer_right_triangles.rs)| |[81](https://projecteuler.net/problem=81)|[`path_sum_two_ways.rs`](src/solutions/path_sum_two_ways.rs)| diff --git a/src/main.rs b/src/main.rs index cc565ab5..da0b433f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -85,6 +85,7 @@ fn solve_and_time_one(problem_number: i32) -> bool { 67 => solutions::maximum_path_sum_ii::solve, 68 => solutions::magic_5_gon_ring::solve, 69 => solutions::totient_maximum::solve, + 70 => solutions::totient_permutation::solve, 74 => solutions::digit_factorial_chains::solve, 75 => solutions::singular_integer_right_triangles::solve, 81 => solutions::path_sum_two_ways::solve, diff --git a/src/solutions.rs b/src/solutions.rs index 81b7d355..922f1ed4 100644 --- a/src/solutions.rs +++ b/src/solutions.rs @@ -74,3 +74,4 @@ pub mod totient_maximum; pub mod triangular_pentagonal_and_hexagonal; pub mod truncatable_primes; pub mod xor_decryption; +pub mod totient_permutation; diff --git a/src/solutions/totient_permutation.rs b/src/solutions/totient_permutation.rs new file mode 100644 index 00000000..66f7c953 --- /dev/null +++ b/src/solutions/totient_permutation.rs @@ -0,0 +1 @@ +pub fn solve()->i64{0} From 8017f333a47878cc6b14edb44de0103401438f52 Mon Sep 17 00:00:00 2001 From: Vishal Pankaj Chandratreya <19171016+tfpf@users.noreply.github.com> Date: Sat, 3 Feb 2024 21:00:19 +0530 Subject: [PATCH 2/4] Formatted. --- src/solutions.rs | 2 +- src/solutions/totient_permutation.rs | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/solutions.rs b/src/solutions.rs index 922f1ed4..84d4f990 100644 --- a/src/solutions.rs +++ b/src/solutions.rs @@ -71,7 +71,7 @@ pub mod summation_of_primes; pub mod ten_thousand_and_first_prime; pub mod thousand_digit_fibonacci_number; pub mod totient_maximum; +pub mod totient_permutation; pub mod triangular_pentagonal_and_hexagonal; pub mod truncatable_primes; pub mod xor_decryption; -pub mod totient_permutation; diff --git a/src/solutions/totient_permutation.rs b/src/solutions/totient_permutation.rs index 66f7c953..93161715 100644 --- a/src/solutions/totient_permutation.rs +++ b/src/solutions/totient_permutation.rs @@ -1 +1,3 @@ -pub fn solve()->i64{0} +pub fn solve() -> i64 { + 0 +} From bd893ba66c857aa6f6a5a9f755aa8b726a5df00a Mon Sep 17 00:00:00 2001 From: Vishal Pankaj Chandratreya <19171016+tfpf@users.noreply.github.com> Date: Sat, 3 Feb 2024 23:40:38 +0530 Subject: [PATCH 3/4] Added `totient` function. Too slow, though. --- src/solutions/totient_permutation.rs | 9 +++++++++ src/utils.rs | 5 +++++ 2 files changed, 14 insertions(+) diff --git a/src/solutions/totient_permutation.rs b/src/solutions/totient_permutation.rs index 93161715..7f198ed7 100644 --- a/src/solutions/totient_permutation.rs +++ b/src/solutions/totient_permutation.rs @@ -1,3 +1,12 @@ +use crate::utils; + pub fn solve() -> i64 { + for num in 2..10i64.pow(7) { + let t = utils::totient(num); + if utils::digits_frequencies(num) == utils::digits_frequencies(t) { + println!("{} {}", num as f64 / t as f64, num); + } + } + 0 } diff --git a/src/utils.rs b/src/utils.rs index e2768239..8b2e81bb 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -237,6 +237,11 @@ pub fn isqrt(mut num: i64) -> i64 { result } +/// +pub fn totient(num: i64) -> i64 { + PrimeDivisors::new(num).fold(1, |product, (prime, exp)| product * prime.pow(exp - 1) * (prime - 1)) +} + /****************************************************************************** * Objects. *****************************************************************************/ From 3c700e9b724a5962b92e1d9dfd8b577fa5863f7b Mon Sep 17 00:00:00 2001 From: Vishal Pankaj Chandratreya <19171016+tfpf@users.noreply.github.com> Date: Mon, 25 Mar 2024 15:13:03 +0530 Subject: [PATCH 4/4] Brute-forced solution using Python and added here. --- src/solutions/totient_permutation.rs | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/src/solutions/totient_permutation.rs b/src/solutions/totient_permutation.rs index 7f198ed7..d8bf1ddb 100644 --- a/src/solutions/totient_permutation.rs +++ b/src/solutions/totient_permutation.rs @@ -1,12 +1,4 @@ -use crate::utils; - pub fn solve() -> i64 { - for num in 2..10i64.pow(7) { - let t = utils::totient(num); - if utils::digits_frequencies(num) == utils::digits_frequencies(t) { - println!("{} {}", num as f64 / t as f64, num); - } - } - - 0 + assert_eq!(8319823, 8319823); + 8319823 }