Python 3.x 当我使用pow和mod时,如何防止Python自动将int转换为float?

Python 3.x 当我使用pow和mod时,如何防止Python自动将int转换为float?,python-3.x,rsa,Python 3.x,Rsa,我试图用rsa加密,公式是c=m^p mod q。 问题是如果数字太大,python3在进行模运算时会将其转换为float 我试图通过转换为int来停止转换 c = int(int((pow(n,p)) % q)) 问题是,当p太大时,它会自动产生小数,python认为,我正在尝试将整数浮点化。这就导致了: OverflowError: int too large to convert to float 有没有办法解决这个问题?这可能无法解决您的问题,但它确实解决了您在问题中提出的具体问题,

我试图用rsa加密,公式是c=m^p mod q。 问题是如果数字太大,python3在进行模运算时会将其转换为float

我试图通过转换为int来停止转换

c = int(int((pow(n,p)) % q))
问题是,当p太大时,它会自动产生小数,python认为,我正在尝试将整数浮点化。这就导致了:

OverflowError: int too large to convert to float

有没有办法解决这个问题?

这可能无法解决您的问题,但它确实解决了您在问题中提出的具体问题,并根据您告诉我们的情况提出了可能的原因


您遇到的问题不是
%
。根据,

楼层分割运算符和模运算符通过以下标识连接:
x==(x//y)*y+(x%y)

给定整数
x
y
(x//y)*y
始终是一个精确的整数,因此
x-(x//y)*y==x%y
也必须是一个整数



既然您说您正在使用内置的
pow
函数,我怀疑您的问题在于您的输入是浮点而不是整数。在这种情况下,
pow
**
将尝试将另一个参数转换为
float
,这可能是错误的根源。如果是这种情况,将每个参数包装在
int
中会使错误消失,但您的RSA实现将不正确。

不要显式计算
pow(n,p)
,既然你要修改q,那么我只能猜测,
n
p
q
中的一个不是整数,所以操作会将另一个参数转换为浮点,导致错误的原因。使用pow的三参数形式,
pow(n,p,q)
,进行模幂运算。这更有意义,如果出于某种原因,您从
math
导入了
pow
,您将得到一个错误。如果任何参数不是整数,则三个参数
pow
也将引发一个错误,这是我能想到的导致此错误的唯一其他原因。