Python比较大数字

时间:2018-05-22 15:01:30

标签: python numbers largenumber

如何比较大数量的python? 我有以下两个数字:

x = 99 ^ 85,y = 73 ^ 62。

在python解释器中计算两个数字会得到以下结果:

>>> x = 99 ** 85
>>> x
42559012338865490805205255842468783301592970011660094241731171697575386634867177511754750618655432231509140219114042806178869109409115320236642740915044006252790234308499
>>> y = 73 ** 62
>>> y
33575100975948386797110696048991269305533302609246066947133332393856972076850553634350302934134549900847114729991729

即使没有计算结果,很明显x会大于y。我对两个数字都执行mod 1000000007以减少数字位数。我得到了以下结果:

>>> mod = 1000000007
>>> x % mod
195405172
>>> y % mod
297675700
>>> 

正如您所看到的那样,数字的模态结果导致 y 大于 x 。是否有效地比较大数字并获得正确的结果。虽然问题的上下文是在python下,但我并不认为这个问题仅限于python。

提前致谢

2 个答案:

答案 0 :(得分:0)

请参阅此问题How does % work in Python?

模数给你剩下的数字。因此,4%10 = 4和14%10 = 4.因此,对于直接比较两个数字,您将使用模数丢失信息 比较大数字在python中非常快。使用ipython的%timeit来查看。

%timeit (99 ** 85)>( 73 ** 62 )

在我的系统上(较旧的i7,14 GB的ram)它需要46.3纳秒,这与python中的任何操作一样快。

答案 1 :(得分:0)

'尺寸'该数字在执行期间的影响非常小: '大数字' :

>>> timeit.timeit('a=99**85; b=73**52; a>b')
0.07298588752746582

'小数字':

>>> timeit.timeit('a=5**2; b=6**3; a>b')
0.07102680206298828

如果问题是如何比较python使用><中的数字:

>>> 5>9
False
>>> 5<9
True