From 87f9ebcb29bed03306cf300af242103615aeace1 Mon Sep 17 00:00:00 2001 From: Siddhant Swarup Mallick <78552027+siddhant2002@users.noreply.github.com> Date: Wed, 1 Mar 2023 20:46:32 +0530 Subject: [PATCH] Add Frizzy Number (fixes #3379) (#3906) --- .../com/thealgorithms/maths/FrizzyNumber.java | 33 +++++++++++++ .../thealgorithms/maths/FrizzyNumberTest.java | 48 +++++++++++++++++++ 2 files changed, 81 insertions(+) create mode 100644 src/main/java/com/thealgorithms/maths/FrizzyNumber.java create mode 100644 src/test/java/com/thealgorithms/maths/FrizzyNumberTest.java diff --git a/src/main/java/com/thealgorithms/maths/FrizzyNumber.java b/src/main/java/com/thealgorithms/maths/FrizzyNumber.java new file mode 100644 index 00000000..48d4fb3b --- /dev/null +++ b/src/main/java/com/thealgorithms/maths/FrizzyNumber.java @@ -0,0 +1,33 @@ +/** Author : Siddhant Swarup Mallick + * Github : https://github.com/siddhant2002 + */ + +/** Program description - To find the FrizzyNumber*/ + + +package com.thealgorithms.maths; + +public class FrizzyNumber { + + /** + * Returns the n-th number that is a sum of powers + * of the given base. + * Example: base = 3 and n = 4 + * Ascending order of sums of powers of 3 = + * 3^0 = 1, 3^1 = 3, 3^1 + 3^0 = 4, 3^2 + 3^0 = 9 + * Ans = 9 + * + * @param base The base whose n-th sum of powers is required + * @param n Index from ascending order of sum of powers of base + * @return n-th sum of powers of base + */ + public static double getNthFrizzy(int base, int n) { + double final1 = 0.0; + int i = 0; + do + { + final1 += Math.pow(base, i++) * (n % 2); + } while ((n /= 2) > 0); + return final1; + } +} diff --git a/src/test/java/com/thealgorithms/maths/FrizzyNumberTest.java b/src/test/java/com/thealgorithms/maths/FrizzyNumberTest.java new file mode 100644 index 00000000..1a8501ea --- /dev/null +++ b/src/test/java/com/thealgorithms/maths/FrizzyNumberTest.java @@ -0,0 +1,48 @@ +package com.thealgorithms.maths; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; +public class FrizzyNumberTest { + @Test + public void testFrizziesForBase2() { + assertEquals( + 1, + FrizzyNumber.getNthFrizzy(2, 1)); + assertEquals( + 3, + FrizzyNumber.getNthFrizzy(2, 3)); + assertEquals( + 1000, + FrizzyNumber.getNthFrizzy(2, 1000)); + } + + @Test + public void testFrizziesForBase3() { + assertEquals( + 1, + FrizzyNumber.getNthFrizzy(3, 1)); + assertEquals( + 3, + FrizzyNumber.getNthFrizzy(3, 2)); + assertEquals( + 29430, + FrizzyNumber.getNthFrizzy(3, 1000)); + } + + @Test + public void testFrizziesForBase69() { + assertEquals( + 1, + FrizzyNumber.getNthFrizzy(69, 1)); + assertEquals( + 69, + FrizzyNumber.getNthFrizzy(69, 2)); + assertEquals( + 328510, + FrizzyNumber.getNthFrizzy(69, 9)); + assertEquals( + 333340, + FrizzyNumber.getNthFrizzy(69, 15)); + } +}