当前位置: 代码迷 >> 综合 >> 任意进制下的可逆素数(应该是大学敲的最后一道算法题,爷青结。)
  详细解决方案

任意进制下的可逆素数(应该是大学敲的最后一道算法题,爷青结。)

热度:60   发布时间:2024-03-05 19:33:57.0

任意进制下的可逆素数是这样定义的:它自身是一个素数,当它转换为任意进制之后,把所有数字逆序,得到的新数字的值仍然是一个素数。比如,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}}

 

  相关解决方案