在RSA算法中用到的大数运算
两个大数的加法运算
得到两个大数的列表。类似加法运算考虑进位。新建一个结果列表,列表长度比较长的那个列表长度加1。把两个大数的列表反转,从第一位开始对应位相加,把加的和放到结果列表的对应位。若加的和大于9,则产生进位,把加的和减10放到结果列表的对应位,然后在结果列表的对应位的下一位加1。遍历整个列表得到相加和。把存储结果的列表反转即得到相加的结果。
两个大数的减法运算
得到两个大数的列表。类似减法运算考虑借位。新建一个结果列表,列表长度和较长的那个列表长度一样。从第末尾位开始对应位相减,把减的结果放到结果列表的对应位。若被减数小于减数,则产生借位,把被减数加10之后再减,把被减数的前一位对应的数减1。遍历整个列表得到相减差。存储结果的列表即为相减的结果。最终结果需要去除首端的0.如果所有位都是0,则返回0。
两个大数的乘法运算
将两个大数放到两个列表中,把整个列表翻转,此时列表的低位就是两个大数的低位。然后用两层循环,外层为第二个乘数,对应的位数用i表示,内层为第一个乘数,对应的位数用j表示。然后让外层的每一位分别乘内层的所有位。把乘得的结果放到一个新的列表中,所在的i+j位上。如果这个结果大于9,那么第i+j位放的数为结果求余10,然后再在第i+j+1位放入这个结果整除10所得到的数。最后把新得到的列表反转然后转换为字符串输出即为两个大数相乘的结果。
大