为什么Python会打印大量数字?

问题描述 投票:-3回答:2

美好的一天。我正在使用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   
python rsa largenumber
2个回答
0
投票

我尝试过这似乎证实了c1可被3整除:

c1 = 36251028222184669113487409017454975826565106104917435244458509025325597595097437837292486054294655693705631371301937875354932194238774646471806718003961847732817524682493697446263462385101163784046225206169381882321268194820701612704489320707217757417267296259559235617734319007884212443563740615946094992859
d1 = c1 // 3
print(d1)

r = c1 - (d1 * 3)
print(r)

输出:

12083676074061556371162469672484991942188368701639145081486169675108532531699145945764162018098218564568543790433979291784977398079591548823935572667987282577605841560831232482087820795033721261348741735389793960773756064940233870901496440235739252472422432086519745205911439669294737481187913538648698330953
0

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
© www.soinside.com 2019 - 2024. All rights reserved.