2011年12月10日星期六

手机选号

最近要弄个联通的186手机号,想选个酷一点的号。首先想到的是平方数。186开头的平方数并不多,可惜可选的号码里面没有一个是平方数。后面又探索了一些特殊的数,但是这些数也很稀有,比如立方数、斐波那契数、三角数等,所以也没有找到。

后来就在圆周率Pi里面找。北京联通现在可以选的186号只有1860和1861开头的。在Pi的小数点后10亿位里面找1860和1861开头的手机号(11位数),根据联通可用号段进一步筛选,剩下了11万多个,一行一号地输出。我又把北京联通选号页面上的100多页近7000个手机号人工复制粘贴下来,也修改成每行一个的文件。然后开始找,大概花了两个半小时找了出来,只有64个。搜索的代码绝对是糙、快、猛:
#! /bin/bash
while read -r line1; do
    while read -r line2; do
        [[ $line1 == $line2 ]] && echo "$line1"
    done <pi
done <unicom
“快”是说写得快,不是算得快。里面pi就是Pi里面找出来的186[01]的号,unicom就是北京联通网站上的所有可选号。

现在放的号里面,不用预存话费的很少有不带4的。最后选了一个0最多的,因为我觉得数字0会让手机号显得比较“轻盈”。我的这个号在pi小数点后1亿多位就出现了。我不选要预存上千话费的“靓号”,比如186 0050 4000就在pi小数点后第881,551,945出现。

在找186号之前,我找了一下在用的电信133号(以前也是联通的),竟然在9亿多位的时候出现了,要知道总共只有10亿位,差点就出现不了了。总之,不是每个手机号都有这么幸运的。

2 条评论:

kempson 说...

很Geek的方法哈.
P.S.那个你的主页fatduck.org怎么无法访问呢?我换了几个代理都没打开呃……我只是想看看Dvorak的那个文章和一些代码。

Peter Pan 说...

谢谢提醒!重启后忘了开服务了。现在应该好了。