作者art1 (人,原来不是人)
看板RegExp
标题[闲聊] 原来正规表示法可以用来找质数
时间Mon Sep 26 01:49:22 2022
http://vimcasts.org/episodes/vimgolf-prime-numbers/
这原本是 vimgolf 的题目,但解法很有意思,因此作者特别介绍,也找出最初的出处
首先要把每个数改用符号表示,像是 1 就用一个 *,2 就用 **,3 就用 ***
这连结的解法是用 Tab,最早出处是用 1
最主要的部份
(<Tab><Tab>+)\1+
最早出处则是 (11+?)\1+
目前的理解是括号内要找的是从二开始递增的数,\1 则是括号找到的数的倍数
有倍数肯定不是质数
两个解法差了一个 ?,我猜有加 ? 的效能应该比较好?
--
「看在上帝的份上,我们不能当着孩子的面枪杀他的父亲!」
「那我们就连孩子一起干掉!」
「第一枪打中的是那个天真的孩子,第二枪是抱着孩子的母亲。第三枪
停顿了三秒,当难以致信的父亲擦拭着脸上爱子的脑浆从震惊中醒转
过来,慢慢的转头看向停车的地方,分辨出是谁在攻击他後,第三颗
子弹才将他的脑壳打飞。」 ─摘自〈狼群〉
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 218.173.33.68 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/RegExp/M.1664128166.A.3D7.html
※ 编辑: art1 (218.173.33.68 台湾), 09/26/2022 01:49:47
※ 编辑: art1 (218.173.33.68 台湾), 09/26/2022 02:16:08
1F:推 OSDBNetwork: + 後面的 ? 应该是指 Lazy Quantifier 09/26 16:36
2F:推 LPH66: 对, 这里的 Lazy 用来让因数从小的开始试 09/26 19:22
3F:→ LPH66: 11+? 会先配出 11 当做 \1 後试着配对 \1+ 09/26 19:22
4F:→ LPH66: 如果成功那就是 2 的倍数, 不成功的话倒回会倒到 +? 这里 09/26 19:22
5F:→ LPH66: 然後延长一个试, 所以就会试 111 当做 \1 来配对 \1+ 09/26 19:23
6F:→ LPH66: 在这里成功就是 3 的倍数, 依此类推 09/26 19:23
7F:→ LPH66: 基本上就是连结里的图从下面试上去 09/26 19:24
8F:→ LPH66: 那当数字有小因数时会比较快结束 09/26 19:24
9F:→ glo6e: 推 12/25 22:52