poj 2417 Discrete Logging 求解模方程a^x=b(mod n),n为素数+模板题(baby_step giant_step)
来源:互联网 发布:刷信誉源码平台 编辑:程序博客网 时间:2024/04/27 13:31
#include <cstdio>#include <cstring>#include <cmath>#include <map>#include <iostream>#include <algorithm>using namespace std;#define LL long long//快速幂求a^bLL pow_mod(LL a,LL b,LL n){ LL s=1; while(b) { if(b&1) s=(s*a)%n; a=(a*a)%n; b=b>>1; } return s;}//求解模方程a^x=b(mod n)。n为素数,无解返回-1//费马小定理a^(n-1)=1(mod n),n为素数。a^0=1,所以循环节小于等于n,即如果存在解,则最小解x<=nLL log_mod (LL a,LL b,LL n){ LL m,v,e=1,i; m=ceil(sqrt(n+0.5)); //x=i*m+j //v=inv(pow_mod(a,m,n),n); //a^m*v=1(mod n) v=pow_mod(a,n-m-1,n); map<LL,LL>x; x[1]=m; for(i=1;i<m;i++) //建哈希表,保存x^0,x^1,...,x^m-1 { e=(e*a)%n; if(!x[e])x[e]=i; } for(i=0;i<m;i++)//每次增加m次方,遍历所有1<=x<=n { if(x[b]) { LL num=x[b]; x.clear();//需要清空,不然会爆内存 return i*m+(num==m?0:num); } b=(b*v)%n; //b=b/(a^m) } return -1;}int main(){ LL a,b,n; while(scanf("%I64d%I64d%I64d",&n,&a,&b)!=EOF) { LL ans=log_mod(a,b,n); if(ans==-1)printf("no solution\n"); else printf("%I64d\n",ans); } return 0;}/* 求解模方程a^x=b(mod n),n为素数。 模板题。 时间复杂度O(sqrt(n)*logn)*/
- poj 2417 Discrete Logging 求解模方程a^x=b(mod n),n为素数+模板题(baby_step giant_step)
- POJ 2417 Discrete Logging (求解模方程a^x≡b(mod n))
- POJ 2417 baby_step giant_step 小步大步算法 a^x == b(mod n) 求解0<=x<n的值
- Poj 2417 Discrete Logging (Baby Step Giant Step 解 a^x = b (mod n) n为素数)
- poj 2417 Discrete Logging(A^x=B(mod c),普通baby_step)
- POJ 2417 Discrete Logging (baby_step,giant_step算法)
- poj 2417 Discrete Logging 数论baby_step,giant_step算法
- hdu 2815 Mod Tree 模方程a^x=b(mod n),n为任意正整数+模板题(扩展Baby Step Giant Step)
- 【模板】baby_step giant_step poj 2417
- poj 2417 baby_step giant_step 高次同余方程
- Baby-Step Giant-Step 解高次同余方程(形如(a^x)%n=b,其中n为素数)
- Baby-step giant-step 解高次同余方程a^x=b(mod n) 模版
- 求解x=a^b(mod m)
- 求解x=a^b(mod m)
- HDU 2815 Mod Tree 解a^x = b(mod n)非互质
- 求 X^a mod N
- 解一类x^a = b (mod p)的方程
- POJ 2417 Discrete Logging bsgs算法模板题
- Mat
- easymock教程-easymock的典型使用
- HDU 4059 The Boss on Mars(容斥原理)
- C++指针的管理
- 编程珠玑之第一章习题7:处理程序存在的缺陷的问答与测试
- poj 2417 Discrete Logging 求解模方程a^x=b(mod n),n为素数+模板题(baby_step giant_step)
- android整合--notification推送通知
- SSH学习笔记二
- Java--chapter03--输出希腊字母
- 函数调用机制与调用约定(转载)
- opengl片段测试之后的逻辑操作
- Android源码目录结构详解
- 结构体和类的区别
- java三种写文件对象详解