关于求解p^x mod q的问题

如题,其中p和q都是素数,而x是数值十分大的合数,则p^x mod q的一种解法可为:

第一步,可把x写成a*b的形式,即p^x=(p^a)^b,其中p^a是可以通过简单的人为计算得出的并且满足p^a>q,设c=p^a,则p^x通过降次得到c^b;

第二步,把c展开,写成c=dq+e的形式,则c^b=(dq+e)^b,由二项式定理可知c^b≡e^b(mod q),则问题转化成了求解e^b(mod q)的问题;

第三步,用迭代的思想,重复第一步和第二步,直到p和x都为素数,这时候就很容易得解了。

例子:求解2^100 mod 7。

解:2^100=16^25=(7*2+2)^25,则2^100=(7*2+2)^25≡2^25(mod 7)

2^25=32^5=(7*4+4)^5,则2^25=(7*4+4)^5≡4^5(mod 7)

4^5=1024,1024=146*7+2,即1024≡2(mod 7)

所以,2^100≡2(mod 7),即2^100 mod 7=2。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------

若有不足之处还请大家批评指正,谢谢大家!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个关于椭圆曲线的问题。首先,我们需要了解一些相关概念和公式。 椭圆曲线方程通常表示为: y^2 = x^3 + ax + b 其中a和b是常数。在模p的意义下,对于一个素数p,我们可以定义一个有限域Fp,它包含0到p-1的所有元素。我们可以在Fp上定义椭圆曲线,这时我们需要保证4a^3 + 27b^2 ≠ 0 (mod p)。这个条件保证了椭圆曲线不会退化成直线或双曲线。 接下来,我们需要了解一些关于点的概念。在椭圆曲线上,每个点都有一个横坐标x和一个纵坐标y。但是,我们还需要定义一个无穷远点O,它不在椭圆曲线上,但是它是椭圆曲线上点的加法单位元。即对于任何点P,P+O = O+P = P。 椭圆曲线上的点加法可以用以下规则表示: 1. 如果P和Q是不同的点,则它们的和是另一个点R。 2. 如果P和Q是相同的点,则它们的和是另一个点R,这时需要使用斜率公式来计算R的坐标。 3. 如果P是一个点,Q是无穷远点O,则P+Q = Q+P = P。 现在,我们来解决你的问题。首先,我们需要定义椭圆曲线的参数a和b,以及模数p=11: ``` a = 1 b = 6 p = 11 ``` 接下来,我们需要定义一个函数来计算模p的意义下的平方根。由于我们的模数p=11是一个素数,我们可以使用Fermat小定理和二次探测定理来计算平方根。具体实现如下: ``` def sqrt_mod_p(x): return pow(x, (p+1)//4, p) ``` 然后,我们需要定义一个函数来计算给定横坐标x的点的纵坐标y。我们可以使用上面的公式计算: ``` def get_y(x): z = (x**3 + a*x + b) % p y = sqrt_mod_p(z) return y ``` 现在,我们可以输入任意横坐标x,输出对应的z和z^((p-1)/2)的值: ``` x = int(input("请输入横坐标x: ")) y = get_y(x) z = (x**3 + a*x + b) % p zp = pow(z, (p-1)//2, p) print("z = ", z) print("z^((p-1)/2) = ", zp) ``` 这样,我们就可以在模11的意义下求解椭圆曲线y^2=x^3+x+6(mod11)上的点,并输出z和z^((p-1)/2)的值了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值