第k小的双素数

题目描述:

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

输入描述

第一行包含一个整数K。1≤k≤10000。

输出描述

若第k小的双素数不超过106则输出它,否则输出-1。

样例输入

1

样例输出

13

题目来自于:https://www.acmcoder.com/#/practice/code

  • 双素数不超过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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值