Problem G: Simply Emirp |
An integer greater than 1 is called a prime number if its only positive divisors (factors) are 1 and itself. Prime numbers have been studied over the years by a lot of mathematicians. Applications of prime numbers arise in Cryptography and Coding Theory among others.
Have you tried reversing a prime ? For most primes, you get a composite (43 becomes 34). An Emirp (Prime spelt backwards) is a Prime that gives you a different Prime when its digits are reversed. For example, 17 is Emirp because 17 as well as 71 are Prime. In this problem, you have to decide whether a number N is Non-prime or Prime or Emirp. Assume that 1<N<1000000.
Interestingly, Emirps are not new to NTU students. We have been boarding 199 and 179 buses for quite a long time!
Input
Input consists of several lines specifying values for N.Output
For each N given in the input, output should contain one of the following:1. "N is not prime.", if N is not a Prime number.
2. "N is prime.", if N is Prime and N is not Emirp.
3. "N is emirp.", if N is Emirp.
Sample Input
17 18 19 179 199
Sample Output
17 is emirp. 18 is not prime. 19 is prime. 179 is emirp. 199 is emirp.
解法:埃拉托斯特尼篩法
import java.util.Scanner; public class UVA10235 { public static int matrix[] = new int[1000000]; public static void main(String[] args) { Scanner sc = new Scanner(System.in); StringBuilder sb = new StringBuilder(); matrix[0] = 1; matrix[1] = 1; for (int i = 2; i < 1000000; i++) { if (matrix[i] == 0) for (int j = 2 * i; j < 1000000; j += i) { matrix[j] = 1; } } while (sc.hasNext()) { int num = sc.nextInt(); String temp = Integer.toString(num); String t_num = ""; int number = 0; for (int i = temp.length() - 1; i >= 0; i--) t_num += temp.charAt(i); number = Integer.parseInt(t_num); if (matrix[num] == 1) sb.append(num + " is not prime." + "\n"); else if (matrix[number] == 0 && number != num) sb.append(num + " is emirp." + "\n"); else sb.append(num + " is prime." + "\n"); } System.out.print(sb); sc.close(); } }
留言
張貼留言