주어진 숫자가 뱀파이어 번호인지 테스트


14

편집 : 복잡성을 높이기 위해 더 많은 과제를 추가했습니다.

수학에서, 뱀파이어 번호 (또는 실제 뱀파이어 번호)는 짝수의 자릿수 n을 갖는 복합 자연수 v이며, 두 개의 정수 x와 y로 각각 n / 2 자릿수와 후행 0이 아닌 여기서 v는 x 및 y의 모든 자릿수를 순서대로 계수하여 다중성을 계산합니다. x와 y를 송곳니라고합니다.

뱀파이어 번호 에 대한 자세한

가성 비 숫자

의사 난수 (Pseudovampire) 수는 뱀파이어 수와 유사하지만, n 자리 수의 의사 수랑의 송곳니는 길이가 n / 2 자리 일 필요는 없다는 점이 다릅니다. 의사 난수는 홀수의 자릿수를 가질 수 있습니다 (예 : 126 = 6 × 21).

입력

명령 행 또는 stdin에서 숫자 수락

산출

  • "1260 = 21 * 60" (숫자가 뱀파이어 인 경우 먼저 작은 송곳니)
  • "1261은 뱀파이어 번호가 아닙니다." (숫자가 뱀파이어 번호가 아닌 경우)
  • "126 = 6 * 21". (숫자가 의사 난도 인 경우)

편집 : 숫자에 송곳니가 여러 개인 경우 표시하십시오.

x = fang1a * fang1b = fang2a * fang2b

나는 프라임 뱀파이어를 포함시키지 않기로 결정했다.
st0le

뱀파이어 또는 슈도 뱀파이어 인 경우 인쇄를 추가해야 할 수도 있습니다.
st0le

송곳니의 여러 쌍은 어떻습니까?
gnibbler

@gnibbler, 수정하겠습니다.
st0le

1
@Nakilon, 증가하는 순서대로 인쇄하십시오. fang1a전에 나타나는 fang2a경우fang1a < fang2a
st0le

답변:


5

파이썬-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

( 여기에서 확인 )
Nakilon

@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.