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