[编程题] 回文素数
时间限制:1秒
空间限制:32768K
如果一个整数只能被1和自己整除,就称这个数是素数。
如果一个数正着反着都是一样,就称为这个数是回文数。例如:6, 66, 606, 6666
如果一个数字既是素数也是回文数,就称这个数是回文素数
牛牛现在给定一个区间[L, R],希望你能求出在这个区间内有多少个回文素数。
输入描述:
输入包括一行,一行中有两个整数(1 ≤ L ≤ R ≤ 1000)
输出描述:
输出一个整数,表示区间内回文素数个数。
输入例子1:
100 150
输出例子1:
2
判断下素数再判断下回文,结束…
let ans = (line)=>{
let left_ = parseInt(line.split(' ')[0]),
right_ = parseInt(line.split(' ')[1])
let isPrime = (num)=>{ //判断质数
if(num===2){ //2是质数
return true
}else if(num%2===0||num===1||num===0){ //排除偶数,0,1
return false
}else{
let sqrtNum = Math.sqrt(num)
for(let i=3;i<=sqrtNum;i+=2){
if(num%i===0){
return false
}
}
return true
}
}
let isVa = (num)=>{ //判断回文
let numArr = num.toString().split('')
if(numArr.length === 1){
return true
}
let left_str,right_str;
if(numArr.length%2){
left_str = numArr.slice(0,parseInt(numArr.length/2)).join('')
right_str = numArr.slice(parseInt(numArr.length/2)+1,numArr.length).reverse().join('')
}else{
left_str = numArr.slice(0,parseInt(numArr.length/2)).join('')
right_str = numArr.slice(parseInt(numArr.length/2),numArr.length).reverse().join('')
}
if(left_str===right_str){
return true
}else{
return false
}
}
let ret = 0
for(let num=left_;num<=right_;num++){
if(isPrime(num)){
if(isVa(num)){
// console.log(num)
ret++
}
}
}
return ret
}
console.log(ans('100 150'))
console.log(ans('1 9'))