任意进制下的可逆素数是这样定义的:它自身是一个素数,当它转换为任意进制之后,把所有数字逆序,得到的新数字的值仍然是一个素数。比如,73在十进制下是一个素数,它在十进制下的逆37也是一个素数,那就称它是十进制下是一个可逆素数。
输入格式:
输入有多行,每行包括两个正整数,数N以及基R,其中N<100000, 1<D<=10, 遇到负数则退出。
输出格式:
对每一行输入,如果是可逆素数,则输出“Yes”,否则输出“No”
输入样例:
在这里给出一组输入。例如:
73 10
23 2
23 10
-2
输出样例:
在这里给出相应的输出。例如:
Yes
Yes
No
样例说明:23的二进制是10111,其逆为11101,对应的十进制数是29,所以是可逆素数。
代码:
最后一个点答案错误,其中关键部分进制转换函数toString()参考这里
import java.util.Scanner;
public class test {static boolean judge(int n) { //判断素数for(int i=2;i<=Math.sqrt(n);i++) {if(n%i==0) {return false;}}return true;}static int reverse(int n) {//求逆序数,Integer自带的reverse反转的是二进制故与此不符int ans=0;while(n!=0) {ans*=10;ans+=n%10;n/=10;}return ans;}public static void main(String[] args) {// TODO Auto-generated method stubScanner in =new Scanner(System.in);int n=in.nextInt();int m;while(n>=0) {m=in.nextInt();if(m==10) {int tmp=reverse(n);//System.out.println(tmp);if(judge(tmp)) { //十进制System.out.println("Yes");}else {System.out.println("No");}}else { //其他进制int tmp=Integer.valueOf(Integer.toString(n, m));//转换成m进制字符串再转化成整数tmp=reverse(tmp);tmp=Integer.valueOf(Integer.parseInt(String.valueOf(tmp),m));//逆序后二进制转十进制//System.out.println(tmp);if(judge(tmp)) {System.out.println("Yes");}else {System.out.println("No");}}n=in.nextInt();}//while}}