cinta作业10
作者:互联网
-
设 p p p是奇素数,请证明 Z p ∗ \Z_p^* Zp∗的所有生成元都是模 p p p的二次非剩余。
令 a a a为 Z p ∗ \Z_p^* Zp∗任意一个生成元,则有 a p − 1 ≡ 1 ( m o d p ) a^{p-1}\equiv1(mod \space p) ap−1≡1(mod p),且 p − 1 p-1 p−1是使 a p − 1 ≡ 1 ( m o d p ) a^{p-1}\equiv1(mod \space p) ap−1≡1(mod p)得最小元素,若 a a a使模 p p p的二次剩余,则根据欧拉准则,则有 a p − 1 2 ≡ 1 ( m o d p ) a^{\frac{p-1}2}\equiv1(mod\space p) a2p−1≡1(mod p), p − 1 2 < p − 1 \frac{p-1}{2}<p-1 2p−1<p−1,矛盾,所以 Z p ∗ \Z_p^* Zp∗的所有生成元都是模 p p p的二次非剩余。 -
利用二次互反律,写程序完成勒让德符号 ( q p ) \left(\frac{q}{p}\right) (pq)的计算, p p p和 q q q是任意的奇素数。
def legendre_symbol(a, p): ans = 0 if a == -1 or a == 3: if p % 4 == 1 or p % 4 == 0: ans = 1 elif p % 4 == 3: ans = -1 return ans elif a == 2: if p % 8 == 1 or p % 8 == 7: ans = 1 else: ans = -1 return ans elif a % 2 == 0: return legendre_symbol(2, p) * legendre_symbol(a/2, p) else: if a % 4 == 1 or p % 4 == 1: return legendre_symbol(p % a, a) elif a % 4 == 3 and p % 4 == 3: return legendre_symbol(p % a, a) * -1 n1, n2 = map(int, input().split(' ')) symbol = legendre_symbol(n1, n2) print(symbol)
标签:10,elif,legendre,symbol,作业,ans,return,cinta,mod 来源: https://blog.csdn.net/glancelike/article/details/110768798