【BZOJ】【2480】【SPOJ 3105】Mod
2015-06-03 20:13
399 查看
扩展BSGS
Orz zyf……然而他的题解对AC大神的题解作了引用……而坑爹的百度云……呵呵了。。。扩展BSGS模板题
/************************************************************** Problem: 2480 User: Tunix Language: C++ Result: Accepted Time:6948 ms Memory:2212 kb ****************************************************************/ //BZOJ 2480 #include<cstdio> #include<cmath> #include<map> #include<cstring> #include<cstdlib> #include<iostream> #include<algorithm> #define rep(i,n) for(int i=0;i<n;++i) #define F(i,j,n) for(int i=j;i<=n;++i) #define D(i,j,n) for(int i=j;i>=n;--i) #define pb push_back using namespace std; typedef long long LL; inline int getint(){ int r=1,v=0; char ch=getchar(); for(;!isdigit(ch);ch=getchar()) if (ch=='-') r=-1; for(; isdigit(ch);ch=getchar()) v=v*10-'0'+ch; return r*v; } const int N=100010; /*******************template********************/ int a,p,b; inline int gcd(int a,int b){return b ? gcd(b,a%b) : a;} LL Pow(LL a,LL b,LL P){ LL r=1; for(;b;b>>=1,a=a*a%P) if (b&1) r=r*a%P; return r; } map<int,int>mp; int ex_BSGS(int a,int p,int b){ int d=0,res=0,cnt=0; LL t=0; a%=p; b%=p; for(int i=0,j=1;i<=50;i++,j=(LL)j*a%p) if (j==b) return i; t=1%p; while((d=gcd(a,p))!=1){ if (b%d) return -1; p/=d; b/=d; t=t*a/d%p; ++cnt; } mp.clear(); int m=ceil(sqrt(p)); for(int i=0,j=1;i<m;i++,j=(LL)j*a%p) mp[(LL)b*j%p]=i; a=Pow(a,m,p); for(int i=0,j=t;i<=m;i++,j=(LL)j*a%p) if (i && mp.count(j)) return i*m-mp[j]+cnt; return -1; } int main(){ #ifndef ONLINE_JUDGE freopen("2480.in","r",stdin); freopen("2480.out","w",stdout); #endif int ans; while(scanf("%d%d%d",&a,&p,&b)!=EOF && a && p && b){ ans=ex_BSGS(a,p,b); if (ans>=0) printf("%d\n",ans); else puts("No Solution"); } return 0; }
View Code
2480: Spoj3105 Mod
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 248 Solved: 103
[Submit][Status][Discuss]
Description
已知数a,p,b,求满足a^x≡b(mod p)的最小自然数x。Input
每个测试文件中最多包含100组测试数据。每组数据中,每行包含3个正整数a,p,b。
当a=p=b=0时,表示测试数据读入完全。
Output
对于每组数据,输出一行。如果无解,输出“No Solution”(不含引号),否则输出最小自然数解。
Sample Input
5 58 332 4 3
0 0 0
Sample Output
9No Solution
HINT
10%的数据,a,p,b≤10000;对于另外30%的数据,p为质数;
100%的数据,a,p,b≤1e9。
Source
鸣谢 Hewr[Submit][Status][Discuss]
相关文章推荐
- Hello world!
- 烟大课表PC端-不仅仅是浏览器和手机APP
- 华为推出物联网系统LiteOS
- poj3067 Japan
- 【HDU】5253-连接的管道(并查集)
- Android底层开发(二)之HAL层 第二步
- 有三个页面,当点击其中一个另两个隐藏
- osquery An Operating System Instrumentation Framewor
- 烟大课表PC端-不仅仅是浏览器和手机APP
- 网络通信框架Volley的学习(二)
- iOS开发:获取视频特定时段的截图
- ogre渲染流程
- Python核心编程 读书笔记
- Fragment 的生命周期及使用方法详解
- hdu3530 Subsequence 单调队列
- 修改profile出错后的补救,谢天谢地export命令还能用
- 物流运交管理系统 配载发车
- Java Lambda简明教程(一)
- build.xml编译时 程序包javax.servlet不存在
- 线程弹球