39 lines
1.2 KiB
Python
39 lines
1.2 KiB
Python
import sys, re
|
|
|
|
# Возвращает абсолютно наименьший вычет числа a по модулю числа b
|
|
def v(a, b):
|
|
r1 = a % b
|
|
r2 = r1 - b
|
|
return r1 if abs(r1) < abs(r2) else r2
|
|
# Считает значение символа Лежандра
|
|
def solve(a, p):
|
|
stop_i = (p-1)//2 + 1
|
|
cnt = sum(1 for i in range(1, stop_i) if v(a*i, p) < 0)
|
|
return pow(-1, cnt)
|
|
|
|
f = re.fullmatch(r'(\d+)/(\d+)', sys.argv[1]).groups()
|
|
print(solve(int(f[0]), int(f[1])))
|
|
|
|
# Более длинное, но подробное решение
|
|
# # Вернет систему абсолютно наименьших вычетов числа
|
|
# def system(a):
|
|
# if a % 2:
|
|
# return [i for i in range(-(a-1)//2, (a-1)//2+1)]
|
|
# else:
|
|
# return [i for i in range(-a//2+1, a//2+1)]
|
|
|
|
# # Возвращает абсолютно наименьший вычет числа a по модулю числа b
|
|
# def v(a, b):
|
|
# s = system(b)
|
|
# for e in s:
|
|
# if a % b == e % b:
|
|
# return e
|
|
|
|
# def legendre(a, p):
|
|
# count = 0
|
|
# for i in range(1, (p-1)//2+1):
|
|
# if v(i*a, p) < 0:
|
|
# count += 1
|
|
# return pow(-1, count)
|
|
|
|
# print(legendre(11,347)) |