1015 Reversible Primes (20 分)
A reversible prime in any number system is a prime whose "reverse" in that number system is also a prime. For example in the decimal system 73 is a reversible prime because its reverse 37 is also a prime.
Now given any two positive integers N (<105) and D (1<D≤10), you are supposed to tell if N is a reversible prime with radix D.
Input Specification:
The input file consists of several test cases. Each case occupies a line which contains two integers N and D. The input is finished by a negative N.
Output Specification:
For each test case, print in one line Yes
if N is a reversible prime with radix D, or No
if not.
Sample Input:
73 10
23 2
23 10
-2
Sample Output:
Yes
Yes
No
思路:
1、prime素数,radix进制
2、判断是不是素数:1不是,2是,3是,4不是,从2到<=sqrt(m).
3、十进制转变为任意进制:Integer.toString(int m, int radix);返回一个String
4、任意进制转变为十进制:Integer.parseInt(String str, int radix),
5、字符串翻转可以用堆栈Stack,也可以str = new StringBuffer(str).reverse().toString();
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;
import java.util.Iterator;
import java.util.LinkedList;
public class Main {
public static void main(String[] args) throws Exception {
StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
boolean bool;
LinkedList<String> list = new LinkedList<>();
while (true) {
in.nextToken();
int m = (int) in.nval;
if (m < 0)
break;
else {
in.nextToken();
int n = (int) in.nval;
bool = isReversePrime(m, n);
if (bool == false)
list.add("No");
else
list.add("Yes");
}
}
Iterator<String> it = list.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
}
private static boolean isReversePrime(int m, int n) {
// TODO Auto-generated method stub
boolean bool = isPrime(m);
if (bool == false) {
return bool;
} else {
String str = Integer.toString(m, n);
str = new StringBuilder(str).reverse().toString();
int temp = Integer.parseInt(str, n);
bool = isPrime(temp);
return bool;
}
}
private static boolean isPrime(int m) {
// TODO Auto-generated method stub
boolean bool = true;
if (m == 1)
return false;
for (int i = 2; i <= Math.sqrt(m); i++) {
if (m % i == 0) {
bool = false;
break;
}
}
return bool;
}
}