poj 2417 小步大步算法+费马小定理求逆元

578 篇文章 9 订阅 ¥299.90 ¥399.90
570 篇文章 25 订阅 ¥299.90 ¥399.90
这篇博客介绍了如何利用小步大步算法和费马小定理解决POJ 2417问题,重点在于求解整数的逆元。内容包括问题描述、输入输出格式、样例输入输出以及解题提示。
摘要由CSDN通过智能技术生成
/*小步大步算法+费马小定理求逆元
如果p为素数,a为整数,则a^(p-1)=1(mod p) -> a^(p-2)=(a^(-1))(mod p),又想了下,这个条件成立要a<p;那么一开始取模就行了。

Baby-Steps-Giant-Steps算法 
高次同余方程。   A^x== B (mod C)
这里用到baby_step,giant_step算法。意为先小步,后大步。
令x=i*m+j  (m=ceil(sqrt(p))),
那么原式化为 A^(i*m)*A^j==B(MOD C) ————> A^j===B*A^(-i*m)(MOD C)
我们先预处理A^0,A^1,A^2……A^(m-1),存入HASH表。,这一步就是baby-step,每次移动1
然后求出A^-m,枚举i,如果存在A^(-i*m)存在于HASH表中,说明存在解x=i*m+j    ,这一步为giant_step,每次移动m
至于B^(-m)的求法,可以先求出B的逆元,也就是B^-1。
注意以上解法是最基本的,只能对于C为素数 
*/
//数据比较大,凡是有相乘的地方都要注意溢出 
//Accepted	4608K	4032MS	G++	1365B 莫名通过 
#include<cstdio>
#inclu
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值