帮助!我需要实现一个C程序(仅使用字符串,stdlib和stdio库),它们使用非常大数字的模幂运算,其中一些是260位数。我正在考虑使用链表,但我找不到如何实现它的好参考。我需要这个,因为我需要使用RSA来加密和解密消息。
另外,我在获取两个非常大的数字的GCD时遇到了完全相同的问题。有什么方法可以做到这一点吗?
答案 0 :(得分:2)
How to store large numbers? 您可以使用这种类型的存储数据,这可以帮助您使用少量内存,并且操作将比其他任何操作快得多,因为您可以将它们直接用于比特,并且您可以使用特殊公式: 要添加Irecomand,请检查溢出;
乘(x = x * y):
aux=x;x=0;
while(y)
{
if(last_bit(y)==1)
x=x+aux;
shift_left(aux);
shift_right(y);
}
function modular_pow(base, exponent, modulus)
{
if modulus = 1 then return 0
Assert :: (modulus - 1) * (modulus - 1) does not overflow base
result = 1
base = base mod modulus
while exponent > 0
if (last_bit(exponent)==1):
result = (result * base) mod modulus
exponent = exponent >> 1
base = (base * base) mod modulus
return result
}