面试-双素数

双素数

题目描述:
一个正整数是素数当且仅当它除了1和自身以外没有其他因子,现在我们定义双素数;一个正整数是双素数当且仅当它本身是个素数,并且将他的十进制表示反转后得到数不等于它自身且也是个素数,如13就是一个双素数,因为13和31不相等且都是素数,现给出一个整数k,你需要找到第k个的双素数,k<=200
思考

  1. 如何求素数
  2. 如何求反转数

示例1

输入:1
输出:13

public static void main(String[] args) {

        int k = 200;// 输入的值

        int count = 0;// 计数

        for (int i = 1; i < 10001; i++) {// 遍历
            if (Su(i)){// 如果为素数,则进入下一步判断
                int j = reverseNum(i);// 获取该素数的相反数
                    if(j != i){// 如果相反数不等于原数,则进入下一步
                        if (Su(j)){// 如果相反数也为素数,则进入下一步
                            count++;// 第几个数
                            if (count == k){// 当是第k个数时输出在控制台
                                System.out.println(i);
                                break;//找到后退出循环
                            }
                        }
                }
            }
        }
    }
    /**
     *  找出一个数的反转数
     * @param num 需要反转的数
     * @return 反转后的数
     */
 public static int reverseNum(int num){
     int rNum = 0;// 变量
     while (num != 0){// 当被反转的数为0时取消反转过程
         rNum = rNum * 10 + num % 10; // 之前取的数扩大10倍 + 每次取一位数(个,十,百....)
         num /= 10;// 完成后整除10,相当于去掉已取的位
     }
     return rNum;
}
    /**
     * 判断一个数是否为素数
     * @param num 需要判断的数
     * @return 是否
     */
public static boolean Su(int num){
   for (int i = 2; i < num; i++) {// 从2()到他本身变量
      if (num % i == 0){// 过程中如发现可以被他本身除尽,则退出
         return false;
      }
   }
   return true;
}
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页