美好的一天。我正在使用RSA在Python中测试某些事情,并且发现了一个可以解决的问题...我已经尝试过在Win10上使用Python 3.8.2,在Linux上也使用Python 3.7.7。
让我们有一个数字,例如:
c1= 36251028222184669113487409017454975826565106104917435244458509025325597595097437837292486054294655693705631371301937875354932194238774646471806718003961847732817524682493697446263462385101163784046225206169381882321268194820701612704489320707217757417267296259559235617734319007884212443563740615946094992859
哪个是奇数,它有一些除数,例如3。但是,使用python时,下一个结果是错误的:
>>> int(c1/3)
12083676074061555316246267430643464247176522791037114836775756754628361403915178709103046469098451026523530772272080775928995905537251905701994027100469698250900136798602107760548114248253333583378545153076020030263178871202026581924052160700631938491851060523788925385374271125821574344356121690982561349632
因为是偶数,并且因为其他结果:
>>> c1-(c1/3)*3
4.9896007738368e+291
所以我可能会丢失一些关于Python中大量数字的信息,但是在Google搜索之后,所有显示的信息都表明Python可以处理长整数(即Handling very large numbers in Python)
提前谢谢您
EDIT1:使用//运算符都不起作用。对于c1 // 3,它显示一个奇数,但对于1433,它不显示:
>>> int(c1/1433)
25297298131322167445037545214187294306719866275723199239586371433276402101706584876000795120234021688465172586752437074519879774327812782348905848779769082172156601811448934599891376653705513433451245958986783036140639646619734644642118968668454860764517223706466696549981028176876987462015607168839974912
>>> int(c1//1433)
25297298131322169653515288916577094086926103353047756625581653192830144867479021519394616925537093994211885116051596563401906625428314477649551094210720061223180408012905580911558592034264594406173220660271724970217214371821843414308785290095755587869691065079943639649500571533764279444217544044623932304
我尝试过这似乎证实了c1
可被3
整除:
c1 = 36251028222184669113487409017454975826565106104917435244458509025325597595097437837292486054294655693705631371301937875354932194238774646471806718003961847732817524682493697446263462385101163784046225206169381882321268194820701612704489320707217757417267296259559235617734319007884212443563740615946094992859
d1 = c1 // 3
print(d1)
r = c1 - (d1 * 3)
print(r)
输出:
12083676074061556371162469672484991942188368701639145081486169675108532531699145945764162018098218564568543790433979291784977398079591548823935572667987282577605841560831232482087820795033721261348741735389793960773756064940233870901496440235739252472422432086519745205911439669294737481187913538648698330953
0
您可以使用Python任意精度库mpmath
from mpmath import mp, mpf
mp.dps = 310 # Used 310 since c1 has 308 digits
# Float precise up to mp.dps digits
c1 = mpf(36251028222184669113487409017454975826565106104917435244458509025325597595097437837292486054294655693705631371301937875354932194238774646471806718003961847732817524682493697446263462385101163784046225206169381882321268194820701612704489320707217757417267296259559235617734319007884212443563740615946094992859)
测试1
print(int(c1/3))
Out:
12083676074061556371162469672484991942188368701639145081486169675108532531699145945764162018098218564568543790433979291784977398079591548823935572667987282577605841560831232482087820795033721261348741735389793960773756064940233870901496440235739252472422432086519745205911439669294737481187913538648698330953
print(c1 - (c1/3)*3)
Out: 0.0
测试2
print(int(c1/1433))
Out: 25297298131322169653515288916577094086926103353047756625581653192830144867479021519394616925537093994211885116051596563401906625428314477649551094210720061223180408012905580911558592034264594406173220660271724970217214371821843414308785290095755587869691065079943639649500571533764279444217544044623932304
print(c1 - (c1/1433)*1433)
0.0