随笔分类 - 算法
RSA简介(三)——寻找质数
摘要:要生成RSA的密钥,第一步就是要寻找质数,本节专讲如何寻找质数。 我们的质数(又称素数)、合数一般是对正整数来讲,质数就是只有1和本身两个的正整数,合数至少有3个约数,而1既不是合数也不是质数。 质数有无穷多个,这个早在古希腊时期就被证明了,使用反证法很容易证明:假设质数只有有限多,分别为a1...
阅读全文
RSA简介(二)——模幂算法
摘要:RSA最终加密、解密都要用到模乘的幂运算,简称模幂运算。 回忆一下RSA,从明文A到密文B B=Ae1%N 对B解密回到明文A,就是 A=Be2%N 其中,一般来说,加密公钥中的e1一般会比较小,取65537居多,但解密的时候,这个e2是一个非常非常大的数,显然,直接通过e2次模乘来解密是不现实的。
阅读全文
RSA简介(一)——数论原理
摘要:RSA是最常用的非对称加密算法。 所谓非对称加密,就是说有两个密钥,一个密钥加密只可以用另外一个密钥解密,一般一个作为公钥,公开给所有人用来加密用,而另一个用来解密其他拥有公钥的加密结果,叫做私钥。另外,拥有私钥者可以用私钥加密信息,公钥可以解密获得加密内容,从而验证私钥拥有者的身份,这是一种特殊的
阅读全文
平方根的C语言实现(二) —— 手算平方根的原理
摘要:一个函数从数学上来说可以有无数个函数列收敛于这个函数,那么程序逼近实现来说可以有无数种算法,平方根自然也不例外。 不知道有多少人还记得手算平方根,那是满足每次在结果上添加一位,也就是按位逼近运算结果的唯一算法。至于数学上如何证明这个唯一性我就不说了,数学证明不会有那么多人有兴趣。按位逼近更加适合手算
阅读全文
平方根的C语言实现(三) ——最终程序实现
摘要:了解了浮点数的存储以及手算平方根的原理,我们可以考虑程序实现了。 先实现一个64位整数的平方根,根据之前的手算平方根,程序也不是那么难写了。 其实,可以合在一起写,代码会短一些,但效率会低那么一点点,而且编译器应该不太容易优化。 不过,我们不需要这个结果。 为了验证其正确性,我们来写个C语言的mai
阅读全文
平方根的C语言实现(一) —— 浮点数的存储
摘要:曾经做一个硬件成本极度控制的项目,因为硬件成本极低,并且还需要实现较高的精度测量,过程中也自己用C语言实现了正弦、余弦、反正切、平方根等函数。 以下,无论是在我的实际项目中还是本地的计算机系统,int都是4个字节且机器为小端,除非特别提及,否则都如此默认。按理float的存储没有大小端之分,可是的确
阅读全文