摘要:找到微信號不管怎么樣,先找到微信號再說。小姐姐說了,微信號是由數(shù)字組成,其中數(shù)字又可以拆分為質(zhì)數(shù)和,且,再且。算法分析傳送門將分解為個質(zhì)數(shù)的乘積代碼微信號微信號因為是,瀏覽器就可以運行它。微信號到手了,然后干嘛呢還能干嘛,當(dāng)然是做附加題啊。
最近在某司機(jī)群,偶然有個老司機(jī)發(fā)了個圖片。
emmm......這是要走上人生巔峰了嗎? 開始行動,一步一步來。
1、找到微信號不管怎么樣,先找到微信號再說。
小姐姐說了,微信號是由 NY + 數(shù)字 組成,其中數(shù)字又可以拆分為質(zhì)數(shù)a和b,且a>b,再且a * b = 707829217。
emmm......筆算幾乎無法下手,只能用機(jī)器算了。老老實實干吧,畢竟關(guān)系到小姐姐的幸福。
開工:先把小于 707829217 的質(zhì)數(shù)都找出來,然后嵌套循環(huán)找出滿足a * b = 707829217的兩個質(zhì)數(shù),So easy!
程序?qū)懞煤?,運行,emmm......計算機(jī)不給力,過了幾分鐘沒有出結(jié)果。
反省一下,這個算法的時間復(fù)雜度是O(n * logn)(總之很慢就是了),不知道 707829217 這個以億為單位的數(shù),要算多久。而且把每一個質(zhì)數(shù)都儲存下來,這個內(nèi)存空間消耗也很大。速度慢,空間大,這怎么行,我們的目標(biāo)是更快、更小 。
再想想,a * b = 707829217,也就是 a = 707829217 / b 啊。只要找到 一個可以把707829217整除的b,然后再判斷 b和707829217 / b是不是質(zhì)數(shù)就行了,這樣就不需要判斷每個數(shù)是不是質(zhì)數(shù)了。算法分析 傳送門:將n分解為2個質(zhì)數(shù)的乘積
javascript代碼:
const isPrime = function (n) { if (n < 2) { return false; } const max = Math.sqrt(n); for (let i = 3; i < max; i = i + 2) { if (n % i === 0) { return false; } } return true; }; const find2number = function (n) { const max = Math.sqrt(n); for (let b = 2; b <= max; b++) { if (n % b === 0) { if (isPrime(b)) { const a = n / b; if (isPrime(a)) { return [a, b]; } } } } return false; }; const r = find2number(707829217); console.log("微信號:NY"+r[0]+r[1]); // 微信號:NY866278171
因為是javascript,瀏覽器就可以運行它。
運行方法:打開chrome、360瀏覽器、firefox、搜狗瀏覽器、qq瀏覽器 其中一個,按下F12,再進(jìn)入Console面板,把代碼貼到下方,按下回車,就可以看到微信號了,微信號:NY866278171。
微信號到手了:NY866278171,然后干嘛呢? 還能干嘛,當(dāng)然是做附加題啊。
統(tǒng)計由奇數(shù)n組成的序列 1 <= n <= 866278171 的序列,中 3 字符出現(xiàn)的次數(shù)。
這不是更簡單了嗎?循環(huán) 1 到 866278171的奇數(shù),求它們中含有3字符的個數(shù)的和,ez !
運行:2分鐘后,得到答案:441684627。
答案是有了,可是為什么這么慢。這么簡單的問題,其他小哥哥一定也能答出來。這樣不行,一定要做到最快。
仔細(xì)分析,可以把問題轉(zhuǎn)化成:求小于等于n的奇數(shù)序列中3分別在個、十、百、千等位數(shù)上出現(xiàn)的次數(shù)的和。
此算法分析過程稍微長,給有興趣了解算法細(xì)節(jié)的小哥哥一個 傳送門:求奇數(shù)序列中x出現(xiàn)的次數(shù)
這里直接上 javascript 代碼:
const count2 = function (n, x) { let sum = 0, factor = 1, higher = 0, current = 0, lower = 0, time = 1; for (; Math.floor(n / factor) != 0; factor *= 10) { higher = Math.floor(n / (factor * 10)); current = Math.floor((n / factor)) % 10; lower = n - Math.floor((n / factor)) * factor; if (factor > 1) { time = 0.5; } else if (x % 2 === 0) { continue;} if (x === 0) { higher--; } if (current === x) { let _t = factor === 1 ? 1 : Math.ceil(lower * time); sum += higher * factor * time + _t; } else if (current > x) { sum += (higher + 1) * factor * time; } else if (current < x) { sum += higher * factor * time; } } return sum; }; console.log("附加題:" + count2(866278171,3)); // 附加題:441684627
運行,程序輸出了附加題:441684627。
題目都解出來了,這就開始加微信,打開微信,搜索NY866278171,添加到通訊錄,驗證信息:附加題答案:441684627。仔細(xì)想想,這樣怎么能體現(xiàn)我的算法更優(yōu)越呢?于是補(bǔ)加上一句:不到0.01秒完事。想想我還真機(jī)智。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/103548.html
摘要:于是乎,冰河寫了一個腳本完美去除了桌面圖標(biāo)煩人的小箭頭。今天,給大家分享一個如何完美去除桌面快捷圖標(biāo)小箭頭的技巧,希望能夠給大家?guī)韼椭?。這種方法不會導(dǎo)致任何問題可放心使用,冰河已經(jīng)親自測試過了。 ...
摘要:時間永遠(yuǎn)都過得那么快,一晃從年注冊,到現(xiàn)在已經(jīng)過去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時候把他們整理一下了。那是因為收藏夾太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...
摘要:今天,百度超級鏈小姐姐和百度資深研發(fā)工程師靜姐姐,為大家?guī)戆俣瘸夋湆W(xué)院系列視頻課程如何快速部署超級鏈。視頻課程共分為三講第一講如何快速建鏈第二講共識機(jī)制第三講智能合約的開發(fā)。 百度超級鏈Xuperchain開源之后,我們感受到了開發(fā)者伙伴們的熱情關(guān)注,其中有不少朋友提到希望進(jìn)一步了解百度超級鏈網(wǎng)絡(luò)的搭建方法。 今天,百度超級鏈小X姐姐和百度資深研發(fā)工程師靜姐姐,為大家?guī)戆俣瘸夋?..
摘要:,之前在寫過一篇微信支付教程手把手教你實現(xiàn)小程序的微信支付。說說必須要自己填寫的東西開頭的這幾個信息都可以從小程序后臺微信支付申請成功后發(fā)的郵件中拿到。 你好,是我琉憶,一個文藝的程序員。 很久沒有更新什么技術(shù)文了,特在此補(bǔ)上一篇精華文章——微信支付。PS,之前在segmentfault寫過一篇微信支付教程:手把手教你實現(xiàn)小程序的微信支付。【從發(fā)表開始,到現(xiàn)在被很多人收藏,加微信和QQ...
摘要:按著我的步驟一步一步操作,你就可以成功的到這個微信支付技能包。原文鏈接手把手教你實現(xiàn)小程序微信支付由于自己本身就是開發(fā)的,所以只涉及到微信支付的開發(fā)。我將會一步一步的記錄如何實現(xiàn)微信支付的。第一步先上微信支付開發(fā)文檔境內(nèi)普通商戶里面下載與。 這是我自己研究了兩天的微信支付整理得的開發(fā)筆記,然后在這里分享給大家,讓大家快速上手微信支付。 按著我的步驟一步一步操作,你就可以成功的get到這...
閱讀 1635·2021-10-27 14:13
閱讀 1876·2021-10-11 10:59
閱讀 3374·2021-09-24 10:26
閱讀 1932·2019-08-30 12:48
閱讀 3044·2019-08-30 12:46
閱讀 2038·2019-08-30 11:16
閱讀 1422·2019-08-30 10:48
閱讀 2746·2019-08-29 16:54