鱼C论坛

 找回密码
 立即注册
查看: 5700|回复: 11

[技术交流] Python: 每日一题 63

[复制链接]
发表于 2017-6-10 14:55:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
吸血鬼解释:1994年柯利弗德·皮寇弗在Usenet社群sci.math的文章中首度提出吸血鬼数。后来皮寇弗将吸血鬼数写入他的书Keys to Infinity的第30章。

吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘而得到,而这对数字各包含乘积的一半位数的数字,其中从最初的数字中选取的数字可以任意排序。

例如:
1260 = 21 * 60
1827 = 21 * 87

那么,找出10000以下的吸血鬼数字吧。

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-6-10 15:52:18 | 显示全部楼层
本帖最后由 冬雪雪冬 于 2017-6-10 15:55 编辑

好像两位数没有解
from itertools import permutations as per
for i in range(1000, 10000):
    for j in per(str(i), 4):
        x = ''.join(j[:2])
        y = ''.join(j[2:])
        if i == int(x) * int(y):
            print('%d = %s * %s'%(i, x, y))
            break
1260 = 21 * 60
1395 = 15 * 93
1435 = 41 * 35
1530 = 51 * 30
1827 = 87 * 21
2187 = 27 * 81
6880 = 86 * 80
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-6-10 17:24:19 | 显示全部楼层
from itertools import permutations as  perms
for x in range(1000,10000):
    for a,b,c,d in perms(map(int, str(x))):
        y,z = (a*10+b),(c*10+d)
        if y * z == x:
            print('%d = %d * %d'%(x, y, z))
            break
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-10 18:45:47 From FishC Mobile | 显示全部楼层
print set([x*y for x in range(10,100) for y in range(10,100) if sorted(list(str(x)+str(y)))==sorted(list(str(x*y)))])

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-10 20:26:58 | 显示全部楼层

不错,还可以继续优化~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-11 08:07:27 | 显示全部楼层
{x*y:(x,y) for x in range(10,100)
           for y in range(10,100)
           if x*y>999 and sorted(str(x*100+y))==sorted(str(x*y))}
{1260: (60, 21),
 1395: (93, 15),
 1435: (41, 35),
 1530: (51, 30),
 1827: (87, 21),
 2187: (81, 27),
 6880: (86, 80)}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-11 22:56:32 | 显示全部楼层

写的忒好,学到很多,感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-19 19:36:59 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-7-27 21:21:35 | 显示全部楼层
写完看看前面,感觉自己怎么写得这么长··· ···
另外,真是佩服jerry大神,每次都能找着不一样的思路

碰到偶数位的数字就拆一半,把全排列过一遍
# 可以将排除范围加快,遇到奇数位直接 *10
def find_v_num(n):
    result = []
    i = 1260
    while i <= n:
        length = len(str(i))
        if length %2:
            i*=10
        else:
            for j in set(itertools.permutations(str(i))):
                if int("".join(j[:length//2]))*int("".join(j[length//2:])) == i:
                    result.append(i)
                    break
            i += 1
    return result
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-17 23:03:39 | 显示全部楼层
import random
import itertools
def vampire(n):
    num = set()
    for j in range(n):
        n1 = list(str(j))
        #print(n1)
        n2 = len(n1)
        #random.random.choices()
        if n2 % 2 == 0:
            for  i in itertools.permutations(n1):
                if (i[n2 // 2 - 1]) == 0 and (i[n2 -1] == 0):
                    continue
                elif int(i[n2 // 2 - 1]) * int(i[n2 - 1]) != int(n1[n2 - 1]):
                    continue
                elif int("".join(i[:n2//2])) * int("".join(i[n2//2:n2])) == j:
                    print(j, "=", int("".join(i[:n2//2])), "*", int("".join(i[n2//2:n2])))
                    num.add(j)
                else:
                    continue
    print(num)
        #for i in range(len(n1)):
            #for j in range
        #n   
            
        #num_list = []
        
vampire(10000)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-18 15:02:54 | 显示全部楼层
res=['%d=%d*%d' %(x1*x2,x1,x2) for x1 in range(10,100) for x2 in range(x1,100) if sorted(str(x1*x2))==sorted(str(x1)+str(x2))]
print('\n'.join(res))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-22 10:26:43 | 显示全部楼层

我感觉主要是因为吸血鬼数字必须是一对数相乘得到,而且这对数必须各包含乘积一半位数的数字。当结果是两位数时,在10--20之间,这对数字其中一个必须包含1,这就意味着另一个必须是两位数;当结果是20-29时,其中一个必须是2,这也就意味着另一个数字必须是两位数。以此类推,两位数的吸血鬼数字不存在
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-10 17:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表