From 148cacf688e1c0e2d191362653c01db93cae56cb Mon Sep 17 00:00:00 2001 From: Mohammad S Anwar Date: Fri, 29 Jul 2022 19:00:29 +0100 Subject: - Added solutions to the task "Perfect Totient Numbers". --- .../theweeklychallenge/FirstPerfectTotient.java | 81 ++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 challenge-175/mohammad-anwar/java/theweeklychallenge/FirstPerfectTotient.java (limited to 'challenge-175/mohammad-anwar/java') diff --git a/challenge-175/mohammad-anwar/java/theweeklychallenge/FirstPerfectTotient.java b/challenge-175/mohammad-anwar/java/theweeklychallenge/FirstPerfectTotient.java new file mode 100644 index 0000000000..2c8027e28c --- /dev/null +++ b/challenge-175/mohammad-anwar/java/theweeklychallenge/FirstPerfectTotient.java @@ -0,0 +1,81 @@ +package theweeklychallenge; + +/* + +Week 175: + + https://theweeklychallenge.org/blog/perl-weekly-challenge-175 + +Task #2: Perfect Totient Numbers + + Write a script to generate first 20 Perfect Totient Numbers. + +Compile and Run: + + mohammad-anwar/java$ javac theweeklychallenge/FirstPerfectTotient.java + mohammad-anwar/java$ java theweeklychallenge.FirstPerfectTotient + +*/ + +import java.util.Arrays; +import java.util.ArrayList; +import junit.framework.TestCase; +import static junit.framework.Assert.*; + +public class FirstPerfectTotient extends TestCase { + + public static void main(String[] args) { + junit.textui.TestRunner.run( + theweeklychallenge.FirstPerfectTotient.class); + } + + public void testFirstPerfectTotient() { + Integer[] got = firstPerfectTotient(20); + Integer[] exp = { + 3, 9, 15, 27, 39, 81, 111, 183, 243, + 255, 327, 363, 471, 729, 2187, 2199, + 3063, 4359, 4375, 5571 + }; + + assertEquals(Arrays.toString(exp), Arrays.toString(got)); + } + + public static int gcd(int m, int n) { + return n == 0 ? m : gcd(n, m % n); + } + + public static boolean isCoprime(int m, int n) { + return gcd(m, n) == 1; + } + + public static boolean isPerfectTotient(int n) { + int i = n; + int s = 0; + while (i >= 1) { + ArrayList coprimes = new ArrayList(); + for (int j = 1; j < i; j++) { + if (isCoprime(j, i)) { + coprimes.add(j); + } + } + i = coprimes.size(); + s = s + i; + } + + return n == s; + } + + public static Integer[] firstPerfectTotient(int n) { + ArrayList fpt = new ArrayList(); + + int i = 1; + while (fpt.size() < n) { + if (isPerfectTotient(i)) { + fpt.add(i); + } + i++; + } + + return fpt.toArray(new Integer[fpt.size()]); + } +} -- cgit