吸血鬼数
|
若一个自然数n可以分解为另外两个自然数a,b的乘积,且满足:
1) a,b的位数相同且都是n的位数的一半。
2) 把a,b拼接后重排其数字可以得到n。
3) a,b不同时以0结尾。
就称n为吸血鬼数,并称a,b为其獠牙。例如
$$1260=21\times 60, \quad 1395=15\times 93, \quad 1435=35\times 41, \quad 1530=30\times 51,$$
都是吸血鬼数。
打印1到1000000之间的吸血鬼数,每个数单独一行,注意不要超时。
|
本题难度:
|
解答
|
显然这样的数或者四位,或者六位,对应獠牙两位和三位的情况。
定义匿名方法f,接受獠牙的范围作为参数,生成对应位数的吸血鬼数,分别传入11到99和101到999作为参数生成四位和六位的吸血鬼数,去重排序后输出。
最终代码有三行。
代码长度:143字节 vs. 全站第一:106字节。
s=sorted
f=lambda a:s({i*j for i in a for j in a if s(str(i*j))==s(str(i)+str(j))and i%10+j%10})
*map(print,f(range(11,99))+f(range(101,999))),
|
| |