Я пытаюсь возвести в степень конечное поле по простому модулю GF(8191) и не знаю, почему не получаю последовательных результатов.
Я сравниваю эти формулы: с и , который должен возвращать тот же результат (по крайней мере, в )
Код Sage действительно прост:
num, a = 42, 5000
# IN THE REAL DOMAIN:
k = float(num)^(a/(a-1))
print 'k=%f' % k
print 'real (A):', float(k^((a-1)/a)), float(k*((1/k)^(1/a)))
print 'real (B):', float(k^((a-1)/a)), float(k*(1/(k^(1/a))))
print 'real (C):', float(k^((a-1)/a)), float(k*(k^(-1/a)))
print
# NOW IN A FINITE FIELD:
order = 8191 # Field of prime size 2^13-1
# variable inv_a for convenience: 1/a and 1(a-1)
inv_a = inverse_mod(a, order)
inv_a1 = inverse_mod(a-1, order)
k = power_mod(num, a*inv_a1, order) # same "num" as in the Real domain
inv_k = inverse_mod(k, order) # 1/k
print 'k=%d' % k
print 'finite (A):', power_mod(k, (a-1)*inv_a, order), k*power_mod(inv_k, inv_a, order) % order
print 'finite (C):', power_mod(k, (a-1)*inv_a, order), k*power_mod(k, -inv_a, order) % order
Что выводит:
k=42.031414
real (A): 42.0 42.0
real (B): 42.0 42.0
real (C): 42.0 42.0
k=416
finite (A): 5080 7898
finite (C): 5080 7898
В конечном поле я ожидал, что формулы дадут тот же результат, что и в коммутативном поле действительных чисел, но я получаю 5080
и 7898
вместо 42
.
Если вы знаете, почему, спасибо, дайте мне знать. Особенно, если есть проблема с кодом.