博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU3930(离散对数与原根)
阅读量:6260 次
发布时间:2019-06-22

本文共 1565 字,大约阅读时间需要 5 分钟。

题意:给出k,m,newx的值,求方程x^k(mod m)=newx的解,其中m为素数。

解法步骤:

(1)先暴力求m的原根g

(2)大步小步求g^t1(mod m)=newx

(3)则g^(t1+n*t2)(mod m)=newx,t2=m-1

(4)x=g^y(mod m),x^k=(g^y)^k=g^(yk)=g^(t1+n*t2)

那么就是求同于方程yk=t1(mod t2),求出y之后带入x=g^y(mod m)解出x

 

#include 
#include
#include
#include
#include
#include
using namespace std;typedef long long LL;const int N=1000005;int p[N];bool prime[N];int num,cnt;LL k,m,newx,g;LL a[65],b[65];void isprime(){ num=0; int i,j; memset(prime,true,sizeof(prime)); for(i=2;i
>=1; a=(a+a)%m; } return ans;}LL quick_mod(LL a,LL b,LL m){ LL ans=1; a%=m; while(b) { if(b&1) { ans=multi(ans,a,m); b--; } b>>=1; a=multi(a,a,m); } return ans;}void factor(LL n){ cnt=0; for(int i=0;(LL)p[i]*p[i]<=n;i++) { if(n%p[i]==0) { a[cnt]=p[i]; int c=0; while(n%p[i]==0) { c++; n/=p[i]; } b[cnt++]=c; } } if(n>1) { a[cnt]=n; b[cnt++]=1; }}LL extend_Euclid(LL a,LL b,LL &x,LL &y){ if(b==0) { x=1; y=0; return a; } LL gd=extend_Euclid(b,a%b,x,y); LL temp=x; x=y; y=temp-(a/b)*y; return gd;}LL Inv(LL n,LL p){ return quick_mod(n,p-2,p);}bool dfs(int dept,LL t){ if(dept==cnt) { LL ans=quick_mod(g,t,m); if(ans==1&&t!=m-1) return false; return true; } LL tmp=1; for(int i=0;i<=b[dept];i++) { if(!dfs(dept+1,t*tmp)) return false; tmp*=a[dept]; } return true;}void find(){ factor(m-1); for(g=2;;g++) if(dfs(0,1)) break;}LL log_x(LL a,LL b,LL p){ map
x; LL z=(LL)ceil(sqrt(p*1.0)); LL v=Inv(quick_mod(a,z,p),p); LL e=1; x[1]=0; for(int i=1;i
>k>>m>>newx) { find(); LL t1=log_x(g,newx,m); LL t2=m-1; cout<<"case"<
<<":"<

 

 

转载地址:http://wgqsa.baihongyu.com/

你可能感兴趣的文章
ftp断点续传
查看>>
6月3日工作日志
查看>>
Android应用性能测试
查看>>
SQL Server2008附加数据库之后显示为只读时解决方法
查看>>
zrender源码分析2--初始化Storage
查看>>
git 的一般使用
查看>>
Mysql使用小tips
查看>>
Hadoop 命令 && Web UI
查看>>
【java】html解析
查看>>
第八章 类和模块(类部分)
查看>>
X86代码不可以复制到X64
查看>>
asp.net mvc ef 性能监控调试工具 MiniProfiler
查看>>
Spring+Mybatis多数据源的一种实现方式,支持事务
查看>>
wpf button--click 和command区别
查看>>
rectify vuforia video background
查看>>
屏蔽广告的问题
查看>>
CF 429C
查看>>
sizeof操作符
查看>>
验证码
查看>>
linux 搭建svn
查看>>