与えられた数が吸血鬼数かどうかをテストします


14

編集:複雑さを増すために、チャレンジにさらに追加しました。

数学では、吸血鬼番号(または真の吸血鬼番号)は偶数の桁数nを持つ合成自然数vであり、2つの整数xとyに因数分解できます。ここで、vには、xおよびyからのすべての数字が任意の順序で正確に含まれ、多重度がカウントされます。xとyは牙と呼ばれます。

ヴァンパイアナンバーの詳細

擬似吸血鬼の数

擬似吸血鬼番号は吸血鬼番号に似ていますが、n桁の擬似吸血鬼番号の牙の長さはn / 2桁である必要はありません。擬似吸血鬼の数字の桁数は奇数、たとえば126 = 6×21です。

入力

コマンドラインまたは標準入力から番号を受け入れる

出力

  • 「1260 = 21 * 60」(番号がヴァンパイアの場合、最初に小さい牙。)
  • 「1261はヴァンパイア番号ではありません。」(番号がヴァンパイア番号でない場合)
  • 「126 = 6 * 21」。(番号が偽吸血鬼番号の場合)

編集:番号に複数の牙がある場合は、そのように表示します。

x = fang1a * fang1b = fang2a * fang2b

プライムの吸血鬼を入れないことに決めました。
st0le

ヴァンパイアまたは疑似ヴァンパイアの場合、印刷を追加する必要があります。
st0le

牙の複数のペアはどうですか?
ニブラー

@gnibbler、私はそれを修正します。
-st0le

1
@Nakilon、それらを昇順で印刷します。fang1aの前fang2aに表示されるfang1a < fang2a
-st0le

回答:


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、この回答は、複数のペアの修正に先立って
ニブラー

4

ルビー、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.")
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.