题目描述:
一个正整数是素数当且仅当它除了1和自身以外没有其他因子。现在我们定义双素数:一个正整数是双素数当且仅当它本身是个素数,并且将他的十进制表示反转后得到数不等于它自身且也是个素数。如13就是一个双素数,因为13和31不相等且都是素数。现给出一个整数k,你需要找到第k小的双素数。
输入描述
第一行包含一个整数K。1≤k≤10000。
输出描述
若第k小的双素数不超过106则输出它,否则输出-1。
样例输入
1
样例输出
13
- 双素数不超过106则输出它,那么限制素数小于等于106,即反转后小于等于601,求出素数集合
- 若该素数不等于反转数,且反转数是小于等于106的素数
- 输出结果
var printOut = function(k){
let arr = [];
let flag = false;
//双素数不超过106则输出它,那么限制素数小于等于106,即反转后小于等于601,求出素数集合
for(i=1;i<=601;i++){
flag = false;
for(j=2;j<i;j++){
if(i%j===0) flag=true
}
if(!flag) arr.push(i)
}
//若该素数不等于反转数,且反转数是小于等于106的素数
let lastarr = []
arr.forEach((item,index)=>{
let strnum = ''+item
let reversenum = strnum.split('').reverse().join('');
if(strnum!==reversenum && arr.indexOf(Number(reversenum))!==-1 && item<=106){
lastarr.push(item)
}
})
console.log(arr,lastarr)
//输出结果
console.log(lastarr[k-1]||-1)
}
printOut(1)
结果:
//arr
(110) [1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601]
//lastarr
(10) [13, 17, 31, 37, 71, 73, 79, 97]
//printOut(1)
13