diff options
Diffstat (limited to 'challenge-175/mohammad-anwar/java/theweeklychallenge/FirstPerfectTotient.java')
| -rw-r--r-- | challenge-175/mohammad-anwar/java/theweeklychallenge/FirstPerfectTotient.java | 81 |
1 files changed, 81 insertions, 0 deletions
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<Integer> coprimes = new ArrayList<Integer>(); + 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<Integer> fpt = new ArrayList<Integer>(); + + int i = 1; + while (fpt.size() < n) { + if (isPerfectTotient(i)) { + fpt.add(i); + } + i++; + } + + return fpt.toArray(new Integer[fpt.size()]); + } +} |
