栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

poj 2417 Discrete Logging

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

poj 2417 Discrete Logging

#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>#include<vector>#include<queue>#include<map>#include<set>#include<time.h>#include<string>#define cl(a,b)memset(a,b,sizeof(a))#define max(x,y) ((x)>(y)?(x):(y))#define min(x,y) ((x)<(y)?(x):(y))#define REP(i,n) for(int i=0;i<n;++i)#define REP1(i,a,b) for(int i=a;i<=b;++i)#define REP2(i,a,b) for(int i=a;i>=b;--i)#define MP make_pair#define LL long long#define ULL unsigned long long#define X first#define Y second#define MAXN 100050using namespace std;int p,b,n;struct node{int a,id;}q[MAXN];bool cmp(node a,node b){return a.a<b.a||(a.a==b.a&&a.id<b.id);}int qmod(int a,int b,int c){int res=1;while(b){if(b&1)res=((LL)res*a)%c;a=((LL)a*a)%c;b>>=1;}return res;}int main(){while(scanf("%d%d%d",&p,&b,&n)!=EOF){int m=sqrt(p*1.0);while(m*m<p)m++;int res=1;int tail=0;int a=qmod(b,m,p);for(int i=0;i<=m;++i){q[tail].id=i;q[tail++].a=res;res=((LL)res*b)%p;}sort(q,q+tail,cmp);int h=0;for(int i=0;i<tail;++i){if(i==0||q[i].a!=q[i-1].a){q[h++]=q[i];}}int flag=0,ans;res=n;int ra=qmod(a,p-2,p);for(int i=0;i<=m;++i){int l=0,r=h-1;while(r-l>1){int mid=(l+r)>>1;if(q[mid].a>res)r=mid;else l=mid;}int pos=-1;if(q[l].a==res)pos=l;if(q[r].a==res)pos=r;if(pos!=-1){ans=i*m+q[pos].id;flag=1;break;}res=((LL)res*ra)%p;}if(flag==0)puts("no solution");elseprintf("%dn",ans);}}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/365565.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号