测试给定数字是否是吸血鬼数字


14

编辑:为了增加复杂性,我为挑战添加了更多内容。

在数学中,吸血鬼数(或真正的吸血鬼数)是一个复合自然数v,具有偶数个数字n,可以分解为两个整数x和y,每个整数具有n / 2个数字,而不能同时带有尾随零,其中v精确地包含x和y的所有数字(以任意顺序计数)。x和y称为the牙。

有关吸血鬼编号的更多信息

伪吸血鬼数

伪吸血鬼编号与吸血鬼编号相似,只不过n位伪吸血鬼编号的尖牙不必具有n / 2位数字的长度。伪吸血鬼数字可以具有奇数个数字,例如126 = 6×21。

输入值

从命令行或标准输入接受数字

输出量

  • “ 1260 = 21 * 60” (如果数字是吸血鬼,则以较小的毒牙开头。)
  • “ 1261不是吸血鬼编号。” (如果该号码不是吸血鬼号码)
  • “ 126 = 6 * 21”。(如果该号码是伪吸血鬼号码)

编辑:如果数字有多个毒牙,则显示它。

x = fang1a * fang1b = fang2a * fang2b

我决定不包括吸血鬼的吸血鬼,我不会太过分。
st0le 2011年

如果是吸血鬼或PseudoVampire,也许我应该添加“打印”,你们怎么说?
st0le 2011年

多对毒牙呢?
gnibbler

@gnibbler,我会修正它。
st0le 2011年

1
@Nakilon,按升序打印。fang1a在以下时间之前fang2a出现fang1a < fang2a
st0le 2011年

Answers:


5

Python-188个字符

不做伪吸血鬼数字

from itertools import*
n=input()
a=[]
for i in map("".join,permutations(`n`)):x,y=int(i[::2]),int(i[::-2]);a+=[(x,y)]*(x*y==n)
print n,a and"=%s*%s"%min(a)or"is not a Vampire Number"

也不能处理多对(用于125460)和之后缺少的空间=
Nakilon 2011年

在此处检查)
Nakilon 2011年

@Nakilon,此答案早于针对多对的修改
gnibbler 2011年

4

Ruby,190个字符

o=[]
[*x.chars].permutation{|r|a=r.pop(x.size/2).join.to_i
r=r.join.to_i
o|=[[a,r]]if a<=r&&a*r==x.to_i}
puts x+(o.any? ? o.map{|i|" = "+i*" * "}*"":" is not a Vampire Number.")
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.