题面

bsgs问题。因为p可能不为质数,所以我们将原先解题的式子变形

每次除以p与a的最大公约数,直到最大公约数为1或b不能整除为止

代码


#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<map>
#define LL long long using namespace std; LL a,b,m,p,now,ans;
bool flag;
map<LL,int> mp; inline LL fast_pow(LL a,LL b){
LL ret=1;
LL aa=a;
for(;b;b>>=1){
if(b&1) ret=ret*aa%p;
aa=aa*aa%p;
}
return ret;
} int main(){
while(~scanf("%lld%lld%lld",&a,&p,&b)){
if(a==0 && b==0 && p==0) break;
if(a%p==0){
puts("No Solution");
continue;
}
if(b==1) {
puts("0");
continue;
}
flag=false;
a%=p;b%=p;
LL t=1,cnt=0;
for(register int i=__gcd(a,p);i!=1;i=__gcd(a,p)){
if(b%i){
puts("No Solution");
flag=1;
break;
}
p/=i;t=t*a/i%p;b/=i;cnt++;
if(b==t) {printf("%lld\n",cnt);flag=1;break;}
}
if(flag) continue;
mp.clear();
now=b;
mp[now]=0;
m=ceil(sqrt(p));
for(register int i=1;i<=m;i++){
now=now*a%p;
mp[now]=i;
}
now=t;
LL k=fast_pow(a,m);
for(register int i=1;i<=m;i++){
now=now*k%p;
if(mp[now]){
flag=true;
ans=i*m-mp[now]+cnt;
printf("%lld\n",ans);
break;
}
}
if(!flag) puts("No Solution");
}
return 0;
}

最新文章

  1. codefordream 关于js初级训练
  2. iOS UITableView , UITableViewController ,UITableViewCell实现全国各省市遍历,选择相应的地区
  3. Unity-Animator深入系列---控制IK
  4. JSBinding + SharpKit / Coroutine支持
  5. Asp.Net Remove Unwanted Headers
  6. mvc action 参数绑定——值提供器【学习笔记】
  7. Selenium+IDEA+Maven+TestNG环境搭建
  8. arduino json 解析
  9. range的新发现
  10. Python数字(Number)
  11. c#mvc实现登录
  12. python 中的集合set
  13. iOS开发之--解决 swap file “*.swp”already exists!问题
  14. [HTTP]_[C/C++]_[解析URL的转义字符百分比字符串]
  15. 在keil调用Notepad++
  16. 检测Sql Server服务器SQL语句执行情况
  17. Ajax请求:本地跨域的问题
  18. centOS上安装MySQL5.7
  19. UIColor和 同 CIColor 与 CGColor 之间的联系、转换
  20. Struts2---输入验证

热门文章

  1. 织梦怎么调用栏目SEO标题
  2. ECMAScript 2016,2017 和 2018 中所有新功能的示例
  3. Linux后台运行java的jar包后台运行java -jar 命令
  4. Classpath in jar关于java加载第三方jar的集中方法和详细解释。
  5. PAT甲级——A1120 Friend Numbers【20】
  6. Jodd - Java界的瑞士军刀轻量级工具包!
  7. MFC注册热键
  8. Java开发系列-注解
  9. linux sudo命令失败 提示sudo:/usr/bin/sudo 必须属于用户 ID 0(的用户)并且设置 setuid 位
  10. Android开发 获取View的尺寸的2个方法