Backwards Read Primes are primes that when read backwards in base 10 (from right to left) are a different prime. (This rules out primes which are palindromes.)
Examples:
13 17 31 37 71 73 are Backwards Read Primes
13 is such because it's prime and read from right to left writes 31 which is prime too. Same for the others.
Task
Find all Backwards Read Primes between two positive given numbers (both inclusive), the second one always being greater than or equal to the first one. The resulting array or the resulting string will be ordered following the natural order of the prime numbers.
Example
backwardsPrime(2, 100) => [13, 17, 31, 37, 71, 73, 79, 97] backwardsPrime(9900, 10000) => [9923, 9931, 9941, 9967] backwardsPrime(501, 599) => []
Note for Forth
Return only the first backwards-read prime between start and end or 0 if you don't find any
backwardsPrime(2, 100) => [13, 17, 31, 37, 71, 73, 79, 97]
backwardsPrime(9900, 10000) => [9923, 9931, 9941, 9967]
(요약) start
와 stop
사이의 숫자 중에서 소수이면서 뒤집었을 때도 소수인 것들만 구해라.
function backwardsPrime(start, stop){ const answer = []; for(let i = start < 10 ? 10 : start; i <= stop; i++) { let prime = true; for(let j = 2; j <= Math.sqrt(i); j++) { if(!(i % j)) { prime = false; break; } } if(prime) { const reverse = `${i}`.split('').reverse().join('') * 1; if(i === reverse) continue; let reversePrime = true; for(let i = 2; i <= Math.sqrt(reverse); i++) { if(!(reverse % i)) { reversePrime = false; break; } } if(reversePrime) { answer.includes(i) ? null : answer.push(i); answer.includes(reverse) ? null : answer.push(reverse); } } } return answer.filter(num => num >= start && num <= stop).sort((a, b) => a - b); }
우선
start
와stop
사이의 숫자들 중에서 소수인 것들을 먼저 찾는다.
단, 한자리 숫자는 뒤집을 수가 없으니 제외.
숫자를 뒤집기 위해서 문자열로 바꾸고,split()
으로 쪼개고,reverse()
로 뒤집고,join()
으로 붙이고,* 1
로 숫자화 한 후에 그 숫자가 소수인지 판별.
뒤집기 전이랑 후가 둘 다 소수이면 배열에push
.
배열에 이미 있으면push
를 하지 않음.
혹시 모르니 마지막에 다시 한번filter
로 범위안의 숫자만 구하고, 오름차순 정렬해서return
.
// 변경 전 if(reversePrime) { answer.includes(i) ? null : answer.push(i); answer.includes(reverse) ? null : answer.push(reverse); } // 변경 후 if(reversePrime) { answer.includes(i) || answer.push(i); answer.includes(reverse) || answer.push(reverse); }
answer.includes()
가false
일 때만 실행이 돼야하기 때문에||
를 사용하게 코드 리팩토링 살짝 함.