1以上100未満の『2個の素数の積』である整数をワンライナーで列挙する

from 素数だの積だのよくわかんねっちゃ - 牌語備忘録 -pygo
CPANモジュール使ってしまうと、こうかなぁ。

perl -MMath::Big::Factors=factors_wheel -le'map@{[factors_wheel$_]}-2||print,1..99'
$ perl -MMath::Big::Factors=factors_wheel -le'map@{[factors_wheel$_]}-2||print,1..99'     
4
6
9
10
14
15
21
22
25
26
33
34
35
38
39
46
49
51
55
57
58
62
65
69
74
77
82
85
86
87
91
93
94
95


モジュールを使わずに、というのを素因数分解ワンライナーの作り方 その2 - すぎゃーんメモのときの要領で考えてみた。

perl -le'print for grep{(@_=grep!($a%$_),2..($a=$_))>1&&(grep!($a%$_),2..($a/=$_[0]))<2}1..99'

ちゃんと34個でてくる。…けどちょっと苦しいかなぁ。サブルーチン使った方がいいだろうか。


サブルーチン版。

perl -le'sub f{(grep!($a%$_),2..($a=pop)-1)[0]}$a=f$_ and!f($_/$a)&&print for 1..99'

ちょっとは短くなった。自分なりに頑張って短くしてみたつもりだけど、これ以上は思いつかなかった。。。

もあとで考えてみよう。


てか、Wikipediaに載ってる100以下の半素数の例、間違ってる…?
半素数 - Wikipedia