今天看到一個(gè)kata,提出一個(gè)“emirps”的概念:一個(gè)質(zhì)數(shù)倒轉(zhuǎn)后得到的是一個(gè)不同的質(zhì)數(shù),這個(gè)數(shù)叫做“emirps”。
揚(yáng)中ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!
例如:13,17是質(zhì)數(shù),31,71也是質(zhì)數(shù),13和17是“emirps”。 但是質(zhì)數(shù)757,787,797是回文質(zhì)數(shù),這意味著反轉(zhuǎn)的數(shù)字與原始數(shù)字相同,所以它們不被認(rèn)為是“emirps”。
題目要求寫一個(gè)函數(shù)輸入一個(gè)正整數(shù)n,返回小于n的“emirps”的個(gè)數(shù),其中最大“emirps”、以及所有小于n的“emirps”的和。
解題思路為先枚舉出所有小于n的質(zhì)數(shù),然后剔除回文質(zhì)數(shù)以及顛倒后為合數(shù)的數(shù)。
先寫判斷質(zhì)數(shù)的函數(shù)
主要根據(jù)三個(gè)數(shù)學(xué)結(jié)論:
所有合數(shù)都是若干個(gè)質(zhì)數(shù)的乘積
如一個(gè)數(shù)可以進(jìn)行因式分解,那么兩個(gè)因數(shù)一定是一個(gè)小于等于sqrt(n),一個(gè)大于等于sqrt(n)。
所有大于3的質(zhì)數(shù)都是6X+1或者6X-1這種形式,也就是6的倍數(shù)的相鄰的數(shù),但并不是所有6X+1或者6X-1都是質(zhì)數(shù)。
第一個(gè)結(jié)論用反證法即可證明
第三個(gè)結(jié)論證明:
我們把數(shù)字都表示為以下形式 6X-1、6X、6X+1、6X+2、6X+3、6X+4 (X為正整數(shù)) 6X => 2*3x 6X+2 => 2(3x+1) 6X+3 => 3(2x+1) 6X+4 => 2(3x+2) 可證明這些肯定不為質(zhì)數(shù),即質(zhì)數(shù)只能為6X-1或者6X-1
代碼:
function isPrimeNumber(num){ if(num == 2 || num == 3){ return true; }/*2、3特殊處理*/ if(num % 6 != 1 && num % 6 != 5){ return false; }/*根據(jù)結(jié)論三排除*/ for(var i=5;i<=Math.sqrt(num);i+=6){ if(num % i == 0 || num % (i+2) == 0){ return false; } }/*根據(jù)結(jié)論二、結(jié)論三排除*/ return true; }
再剔除回文質(zhì)數(shù)以及顛倒后為合數(shù)的數(shù)
代碼:
function emirpNumber(num){ var reverseNumber = Number(String(num).split('').reverse().join('')) if(reverseNumber != num && isPrimeNumber(reverseNumber)){ return true; } else{ return false; } }
最后輸出想要的結(jié)果
代碼:
function findEmirp(n){ var emirpGroup = []; for(var i=1;i<n;i++){ if(isPrimeNumber(i) && emirpNumber(i)){ emirpGroup.push(i); } } return [ 'n為:' + n, '數(shù)量為:' + emirpGroup.length, '最大數(shù):' + emirpGroup[emirpGroup.length - 1], '求和:' + emirpGroup.reduce(function(total,current){ return total + current; }) ] }
看一下輸出結(jié)果和用時(shí)
n=1000000:
n=10000000:
以上這篇javascript實(shí)現(xiàn)Emrips反質(zhì)數(shù)枚舉的示例代碼就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持創(chuàng)新互聯(lián)。
分享標(biāo)題:javascript實(shí)現(xiàn)Emrips反質(zhì)數(shù)枚舉的示例代碼
文章出自:http://jinyejixie.com/article48/pshgep.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、ChatGPT、網(wǎng)站營銷、網(wǎng)站改版、品牌網(wǎng)站設(shè)計(jì)、關(guān)鍵詞優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)