diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2022-06-04 03:13:53 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-06-04 03:13:53 +0100 |
| commit | 97e06c11aaf7463f2e3fe85b341adfb4efa4f11f (patch) | |
| tree | 42b308b6a7c81b56f6b9268507db5dcb408758df /challenge-167 | |
| parent | 7bcf2d3292c4a1bfc064ddbb7c6806248e243ef4 (diff) | |
| parent | 155586bc6de8a84b67ef1136d252265891d07bae (diff) | |
| download | perlweeklychallenge-club-97e06c11aaf7463f2e3fe85b341adfb4efa4f11f.tar.gz perlweeklychallenge-club-97e06c11aaf7463f2e3fe85b341adfb4efa4f11f.tar.bz2 perlweeklychallenge-club-97e06c11aaf7463f2e3fe85b341adfb4efa4f11f.zip | |
Merge pull request #6196 from mikedici/challenge-167
challenge-167 entry
Diffstat (limited to 'challenge-167')
3 files changed, 143 insertions, 0 deletions
diff --git a/challenge-167/michael-dicicco/java/challenge167/circularprime.java b/challenge-167/michael-dicicco/java/challenge167/circularprime.java new file mode 100644 index 0000000000..a7038ffba1 --- /dev/null +++ b/challenge-167/michael-dicicco/java/challenge167/circularprime.java @@ -0,0 +1,46 @@ +package challenge167; + +import java.util.LinkedHashSet; +import java.util.Set; + +/** + * + * @author mddicicco + */ +public class circularprime { + public static Set<String> used_numbers = new LinkedHashSet<>(); + public static boolean isPrime(int someNumber){ + if (someNumber <= 1){ + return false; + } + for(int i = 2; i < (someNumber - 1); i++){ + if (someNumber % i == 0){ + return false; + } + } + return true; + } + + public static String rotate(String someNumber){ + // rotate to the left one character + return someNumber.substring(1,someNumber.length()) + someNumber.substring(0,1); + } + + public static boolean validate(String someNumber){ + // check if the original string is prime + if (!isPrime(Integer.parseInt(someNumber))){ + return false; + } + + String temp = someNumber; + // check if any rotations of the string are not prime + for(int i = 0; i < someNumber.length() - 1; i++){ + temp = rotate(temp); + if (!isPrime(Integer.parseInt(temp))){ + return false; + } + used_numbers.add(temp); + } + return true; + } +} diff --git a/challenge-167/michael-dicicco/java/challenge167/task1.java b/challenge-167/michael-dicicco/java/challenge167/task1.java new file mode 100644 index 0000000000..695304347a --- /dev/null +++ b/challenge-167/michael-dicicco/java/challenge167/task1.java @@ -0,0 +1,43 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Main.java to edit this template + */ +package challenge167; + +/** + * + * @author mddicicco + */ +public class task1 { + + /** + * Challenge 167 Task1 + * + * Solution By: Michael DiCicco + * + * Write a script to find out first 10 circular primes having at least 3 + * digits (base 10). Please checkout wikipedia for more information. A + * circular prime is a prime number with the property that the number + * generated at each intermediate step when cyclically permuting its (base + * 10) digits will also be prime. + * + * Output 113, 197, 199, 337, 1193, 3779, 11939, 19937, 193939, 199933 + */ + + public static void main(String[] args) { + String[] ten_circular_primes = new String[10]; + String someNumber = "111"; + int index = 0; + while (ten_circular_primes[9] == null) { + if (circularprime.validate(someNumber)) { + if (!circularprime.used_numbers.contains(someNumber)) { + ten_circular_primes[index] = someNumber; + index++; + } + } + someNumber = Integer.toString(Integer.parseInt(someNumber) + 1); + } + System.out.println(String.join(", ", ten_circular_primes)); + + } +} diff --git a/challenge-167/michael-dicicco/python/task1.py b/challenge-167/michael-dicicco/python/task1.py new file mode 100644 index 0000000000..9102a14279 --- /dev/null +++ b/challenge-167/michael-dicicco/python/task1.py @@ -0,0 +1,54 @@ +# Challenge 167 Task1 +# +# Solution By: Michael DiCicco +# +# Write a script to find out first 10 circular primes having at least 3 +# digits (base 10). Please checkout wikipedia for more information. A +# circular prime is a prime number with the property that the number +# generated at each intermediate step when cyclically permuting its (base +# 10) digits will also be prime. +# +# Output 113, 197, 199, 337, 1193, 3779, 11939, 19937, 193939, 199933 + +class CircularPrime: + used_numbers = set() + + @staticmethod + def is_prime(some_number): + if int(some_number) <= 1: + return False + for i in range(2, int(some_number) - 1): + if int(some_number) % i == 0: + return False + return True + + @staticmethod + def rotate(some_number): + return some_number[1: len(some_number)] + some_number[0] + + @staticmethod + def validate(some_number): + if not CircularPrime.is_prime(some_number): + return False + tmp = some_number + for i in range(0, len(some_number) - 1): + tmp = CircularPrime.rotate(tmp) + if not CircularPrime.is_prime(int(tmp)): + return False + CircularPrime.used_numbers.add(tmp) + return True + + +def main(): + ten_circular_primes = [] + some_number = "111" + while len(ten_circular_primes) < 10: + if CircularPrime.validate(some_number): + if some_number not in CircularPrime.used_numbers: + ten_circular_primes.append(some_number) + some_number = str(int(some_number) + 1) + print(", ".join(ten_circular_primes)) + + +if __name__ == '__main__': + main() |
