def digits(x, n): if(x<=0): return [] li=[] while(x>0): d=divmod(x, n) li.append(d[1]) x=d[0] li.sort() return li; def digitalList(x, n): li=[] for k in xrange(len(x)): li+=digits(x[k], n) li.sort() return li; def factorPairs(n): li=divisors(n) del li[0]; del li[-1] pairs=[] for x in xrange(-((-len(li))>>1)): pairs.append([li[x], li[-x-1]]) return pairs def factorTuples(n, t): if(t<=1): return [] if(t==2): return factorPairs(n) tuples=[] li=factorTuples(n, t-1) for x in xrange(-((-len(li))>>1)): p=factorPairs(li[x][-1]) del li[x][-1] for y in xrange(len(p)): l=li[x]+p[y] l.sort() if(l not in tuples): tuples.append(l) return tuples def pseudoVampire(x, n): d=digits(x, n) for k in xrange(2, len(d)): t=factorTuples(x, k) for j in xrange(len(t)): if(digitalList(t[j], n)==d): return True return False def fangs(x, n): d=digits(x, n) fangs=[] for k in xrange(2, len(d)): t=factorTuples(x, k) for j in xrange(len(t)): if(digitalList(t[j], n)==d): fangs.append(t[j]) return fangs def trueVampire(x, n): d=digits(x, n) t=factorPairs(x) for j in xrange(len(t)): if((digitalList(t[j], n)==d)&(len(digits(t[j][0], n))==len(digits(t[j][1], n)))&~((t[j][0]%n==0)&(t[j][1]%n==0))): return True return False def trueFangs(x, n): d=digits(x, n) t=factorPairs(x) fangs=[] for j in xrange(len(t)): if((digitalList(t[j], n)==d)&(len(digits(t[j][0], n))==len(digits(t[j][1], n)))&~((t[j][0]%n==0)&(t[j][1]%n==0))): fangs.append(t[j]) return fangs radix=10 index=1 value=2 while(index<=1000): if(pseudoVampire(value, radix)): print(str(index)+" "+str(value)) index+=1 value+=1