From b294ddcb381ccbf84e8190717fa2aad8cc9ed8da Mon Sep 17 00:00:00 2001 From: Taranjeet Singh Kalsi Date: Sat, 12 Nov 2022 01:27:18 +0530 Subject: [PATCH] Add AliquotSum (#3765) --- .../com/thealgorithms/maths/AliquotSum.java | 31 +++++++++++++++++++ .../thealgorithms/maths/AliquotSumTest.java | 4 +++ 2 files changed, 35 insertions(+) diff --git a/src/main/java/com/thealgorithms/maths/AliquotSum.java b/src/main/java/com/thealgorithms/maths/AliquotSum.java index 3525c3684..6eb18f260 100644 --- a/src/main/java/com/thealgorithms/maths/AliquotSum.java +++ b/src/main/java/com/thealgorithms/maths/AliquotSum.java @@ -30,4 +30,35 @@ public class AliquotSum { return sumWrapper.value; } + + /** + * Function to calculate the aliquot sum of an integer number + * + * @param n a positive integer + * @return aliquot sum of given {@code number} + */ + public static int getAliquotSum(int n) { + if (n <= 0) + return -1; + int sum = 1; + double root = Math.sqrt(n); + /* + * We can get the factors after the root by dividing number by its factors + * before the root. + * Ex- Factors of 100 are 1, 2, 4, 5, 10, 20, 25, 50 and 100. + * Root of 100 is 10. So factors before 10 are 1, 2, 4 and 5. + * Now by dividing 100 by each factor before 10 we get: + * 100/1 = 100, 100/2 = 50, 100/4 = 25 and 100/5 = 20 + * So we get 100, 50, 25 and 20 which are factors of 100 after 10 + */ + for (int i = 2; i <= root; i++) { + if (n % i == 0) { + sum += i + n / i; + } + } + // if n is a perfect square then its root was added twice in above loop, so subtracting root from sum + if (root == (int) root) + sum -= root; + return sum; + } } diff --git a/src/test/java/com/thealgorithms/maths/AliquotSumTest.java b/src/test/java/com/thealgorithms/maths/AliquotSumTest.java index d3fef8d36..94631637f 100644 --- a/src/test/java/com/thealgorithms/maths/AliquotSumTest.java +++ b/src/test/java/com/thealgorithms/maths/AliquotSumTest.java @@ -12,5 +12,9 @@ public class AliquotSumTest { assertEquals(6, AliquotSum.getAliquotValue(6)); assertEquals(9, AliquotSum.getAliquotValue(15)); assertEquals(1, AliquotSum.getAliquotValue(19)); + assertEquals(0, AliquotSum.getAliquotSum(1)); + assertEquals(6, AliquotSum.getAliquotSum(6)); + assertEquals(9, AliquotSum.getAliquotSum(15)); + assertEquals(1, AliquotSum.getAliquotSum(19)); } }