吸血鬼数  
    |   
               
              
              若一个自然数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))),
 
               |  
           
         
        
            
            |    |