5.元素的冪
尤拉定理,對於任意z*[n]中的a,有a^phi(n)(mod n) = a^|z*[n]| (mod n) = 1(單位元),由之前z*[n]定義處定理可知
費馬定理,對於素數p,a^(p-1) (mod p) = 1 因為|z*[p]| = p - 1,0不在z*[p]當中
求冪當然是化成平方的平方的形式比較快
6.rsa公鑰加密系統
公鑰p和私鑰s實際上是一對互逆的過程 m = p(s(m)) 或 m = s(p(m)), 而且從p很難推出s,這種互逆不可互推的過程就是數論當中的原理,這兩個等式也分別代表了公鑰加密的兩種場景,前者是強調任何人都可以看資訊,但沒有私鑰,無法冒充那個拿著私鑰的人來發資訊,後者強調任何人都可以發,但沒有私鑰,你無法看到發給對應公鑰之人的資訊。
加密過程:隨機選大素數p、q 一般512位。n = pq,可知phi[n] = |z*[n]| = (p - 1)(q - 1) 這是因為 n^((p - 1)(q -1)) = 1,取最小與phi[n]互質的奇數e,求其對於z*[phi[n]]的逆元d,其中(e, n)為公鑰,(d, n)為私鑰 兩個過程分別為:
p(m) = (m^e) mod n
s(c) = (c^d) mod n
正確性:p(s(m)) = s(p(m)) = (m^(ed)) mod n = (m^(1 + k(p-1)(q -1))) mod n = m * (m^(p-1))^k(q - 1))
其中m^(p - 1) = 1(費馬定理) 所以上面式子結果為m
在實際應用中,一般用乙個其他比較快速加密手段加密正文,然後將金鑰用rsa加密,可恨高程度的提高效率
數論知識總結
錯排公式 lucas定理 組合數取模 素數求解 尤拉函式 大數相乘 反素數兩直線是否相交 點到直線的最短距離 三分1三分2 第一類stirling數和第二類stirling數 卡特蘭數 判斷乙個點是否在多邊形內部 博弈之 nim 遊戲和 sg 函式 nim博弈變形 anti nim 博弈論重要演算法...
演算法導論 排序演算法總結
從六月初開始看演算法導論,陸陸續續看了有2個月了,但實際看的時間只有半個月左右。這期間都忙著找導師 期末考試,同時還回家修養了十來天。真正專心的看演算法是在離家返校後,由於沒有考試和作業的煩惱,天天都沉浸在演算法中,感覺效率較高。這段時間學到的東西較多,下面來總結一下 比較排序有 插入排序法 合併排...
數論演算法總結 素數
1.如果給定乙個數n,要你計算小於n的素數的個數,如果n足夠大,那麼 素數的個數等價於x ln x 如下 include include includeusing namespace std 這是判斷素數個數的位數 void pr int n cout static cast log10 k log...