From 204318ac52453b7d365cf0cd60c3fbeaacf4edaa Mon Sep 17 00:00:00 2001 From: Federico I Date: Wed, 18 Mar 2020 17:56:11 +0000 Subject: [rust] Grains --- grains/src/lib.rs | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 grains/src/lib.rs (limited to 'grains/src/lib.rs') diff --git a/grains/src/lib.rs b/grains/src/lib.rs new file mode 100644 index 0000000..05449be --- /dev/null +++ b/grains/src/lib.rs @@ -0,0 +1,23 @@ +pub fn square(s: u32) -> u64 { + assert!(s > 0 && s < 65,"Square must be between 1 and 64"); + 2_u64.pow(s-1) +} + +/// This version uses the already defined `square(s)` function. +/// +/// There is also a faster way to compute this according to +/// [Wolfram|Alpha](https://www.wolframalpha.com/input/?i=sum_0%5En+2%5En) +/// +/// 2_u64.pow(65) - 1 == 18_446_744_073_709_551_615 +/// +/// this solution however doesn't work because +/// +/// 2_u64.pow(65) == 18_446_744_073_709_551_616 +/// +/// which overflows since +/// +/// std::u64::MAX == 18_446_744_073_709_551_615 +/// +pub fn total() -> u64 { + (1..65).map(square).sum() // std::u64::MAX +} -- cgit v1.2.3