Anda di halaman 1dari 3

# helping functions

def gcd(x, y):


a, b = x, y
while b:
a, b = b, a % b
return a

def inv(a, b):


a, b = b, a

def print_solution(test_no, result):


print('Case #%d: %s' % (test_no, result))

def is_prime(x):
if(x == 2):
return True

if(x % 2 == 0):
return False

i = 3
while(i * i <= x):
if(x % i == 0):
return False
i += 2

return True

def isqrt(n):
x = n
y = (x + 1) // 2
while y < x:
x = y
y = (x + n // x) // 2
return x

def is_square(n):
return isqrt(n) ** 2 == n

def find_factor(l, p):


print(l)
for x in l:
if(p % x == 0):
return int(p / x)

raise ValueError('factor not found')

# solving part
def solve_test(test_no):
line = input()
n, l = (int(i) for i in line.split())

line = input()
v = [int(i) for i in line.split()]

primes_raw = []
for i in range(l-1):
p = 0
if(v[i] != v[i+1]):
p = gcd(v[i], v[i+1])
elif(isqrt(v[i]) ** 2 == v[i]):
p = isqrt(v[i])
else:
continue

primes_raw.append(p)

first = 0
if(v[0] != v[1]):
first = v[0] / gcd(v[0], v[1])
elif(isqrt(v[0]) ** 2 == v[0]):
first = isqrt(v[0])
last = 0
if(v[l-1] != v[l-2]):
last = v[l-1] / gcd(v[l-1], v[l-2])
elif(isqrt(v[l-1]) ** 2 == v[l-1]):
last = isqrt(v[l-1])

if(first):
primes_raw.append(first)
if(last):
primes_raw.append(last)

primes_set = set(primes_raw)
primes = []
for x in primes_set:
primes.append(x)

for i in range(l-1):
if(v[i] == v[i+1] and isqrt(v[i]) ** 2 != v[i]):
p = find_factor(primes, v[i])
if(not (p in primes)):
primes.append(p)

if(first == 0):
first = find_factor(primes, v[0])
if(not (first in primes)):
primes.append(first)

if(last == 0):
last = find_factor(primes, v[l-1])
if(not (last in primes)):
primes.append(last)

# check primes
if(len(primes) != 26):
# print_solution(test_no, 'A')
# return
raise ValueError('wrong number of primes: ' + str(len(primes)))
# for x in primes:
# if(not is_prime(x)):
# raise ValueError(str(x) + ' not prime')

primes.sort()
letter_of = {}
for i in range(len(primes)):
character = chr(ord('A') + i)
letter_of[primes[i]] = character

sol = ""
sol += letter_of[first]
for i in range(l-1):
p = 0
if(v[i] != v[i+1]):
p = gcd(v[i], v[i+1])
elif(isqrt(v[i]) ** 2 == v[i]):
p = isqrt(v[i])
else:
p = find_factor(primes, v[i])
sol += letter_of[p]
sol += letter_of[last]

print_solution(test_no, sol)

t = int(input())
for i in range(t):
solve_test(i+1)

Anda mungkin juga menyukai