大量的模幂

问题描述

我目前正在使用大量密码技术。

a = 3087646334 

p = 1606938044258990275541962092341162602522202993782792835301611

b = int((p-1)/2).

欧拉准则说

a ^ b(mod p)= 1或a ^ b(mod p)= p-1。

SAGE提供正确答案,而python提供错误答案。为什么呢?

  • 预期输出-1 or p-1

  • SAGE输出-1

  • Python输出-1047939464127281862631850078334726680804120494559424004614779

代码在下面。

圣人

a = 3087646334 
p = 1606938044258990275541962092341162602522202993782792835301611
b = int((p-1)/2)

power_mod(a,b,p)

Python

a = 3087646334
p = 1606938044258990275541962092341162602522202993782792835301611
b = int((p-1)/2)

pow(a,p)

解决方法

因为您使用的是浮点除法,所以不准确。请改用b = (p-1) // 2