参考博客 https://blog.csdn.net/clover_hxy/article/details/50683832
关于欧拉定理推论的证明 https://www.cnblogs.com/aseer/p/9675610.html /*
给定A,B,C,C是质数,求出A^x=B(mod C)的解
解:A^x = A^(x % phi[C]) = B(mod C) (欧拉定理推论)
x % phi[C] < C
所以不超过C的范围内必有一个解,
只要求到C即可,
进行分块,另 m=sqrt(C),向上取整, 那么 x=i*m-j
原式==》A^j*B = A^(m*i)(mod C)
先枚举j,将A^j*B进行hash
再枚举i,从hash表中找到第一个满足条件的A^j*B
此时x=i*m-j
*/
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<map>
#include<cmath>
using namespace std;
#define ll long long
ll a,b,c,m,f[];
map<ll,int>mp;
ll Pow(ll x){
ll res=,aa=a;
while(x>){
if(x%)
res=res*aa%c;
x>>=;
aa=aa*aa%c;
}
return res;
}
int main(){
while(scanf("%lld%lld%lld",&c,&a,&b)!=EOF){
mp.clear();
if(a%c==){//c|a,显然是不存在解x的,除非
puts("no solution");
continue;
}
int p=;
m=ceil(sqrt(c*1.0));
ll ans; for(int j=;j<=m;j++){//预处理所有j的情况,建立hash表
if(j==){
ans=b%c;mp[ans]=j;continue;
}
ans=(ans*a)%c;
mp[ans]=j;
} ll t=Pow(m);
ans=;
for(int i=;i<=m;i++){
ans=(ans*t)%c;
if(mp[ans]){//枚举每个块ans=a^(m*i)=a^j*b,把hash表中的那个j找到即可
int t=i*m-mp[ans];
printf("%d\n",(t%c+c)%c);
p=;
break;
}
}
if(!p)
puts("no solution");
}
}

poj2417 bsgs算法非逆元模板,用于求解A^x=B(mod C)的方程的更多相关文章

  1. BSGS算法解析

    前置芝士: 1.快速幂(用于求一个数的幂次方) 2.STL里的map(快速查找) 详解 BSGS 算法适用于解决高次同余方程 \(a^x\equiv b (mod p)\) 由费马小定理可得 x &l ...

  2. uva11916 bsgs算法逆元模板,求逆元,组合计数

    其实思维难度不是很大,但是各种处理很麻烦,公式推导到最后就是一个bsgs算法解方程 /* 要给M行N列的网格染色,其中有B个不用染色,其他每个格子涂一种颜色,同一列上下两个格子不能染相同的颜色 涂色方 ...

  3. BSGS算法+逆元 POJ 2417 Discrete Logging

    POJ 2417 Discrete Logging Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 4860   Accept ...

  4. POJ2417 Discrete Logging | A,C互质的bsgs算法

    题目: 给出A,B,C 求最小的x使得Ax=B  (mod C) 题解: bsgs算法的模板题 bsgs 全称:Baby-step giant-step 把这种问题的规模降低到了sqrt(n)级别 首 ...

  5. 【算法】BSGS算法

    BSGS算法 BSGS算法用于求解关于x的模方程\(A^x\equiv B\mod P\)(P为质数),相当于求模意义下的对数. 思想: 由费马小定理,\(A^{p-1}\equiv 1\mod P\ ...

  6. [BSGS算法]纯水斐波那契数列

    学弟在OJ上加了道"非水斐波那契数列",求斐波那契第n项对1,000,000,007取模的值,n<=10^15,随便水过后我决定加一道升级版,说是升级版,其实也没什么变化,只 ...

  7. BSGS算法及其扩展

    bsgs算法: 我们在逆元里曾经讲到过如何用殴几里得求一个同余方程的整数解.而\(bsgs\)就是用来求一个指数同余方程的最小整数解的:也就是对于\(a^x\equiv b \mod p\) 我们可以 ...

  8. BSGS算法及拓展

    https://www.zybuluo.com/ysner/note/1299836 定义 一种用来求解高次同余方程的算法. 一般问题形式:求使得\(y^x\equiv z(mod\ p)\)的最小非 ...

  9. BSGS算法

    BSGS算法 我是看着\(ppl\)的博客学的,您可以先访问\(ppl\)的博客 Part1 BSGS算法 求解关于\(x\)的方程 \[y^x=z(mod\ p)\] 其中\((y,p)=1\) 做 ...

随机推荐

  1. mongodb 系列 ~ mongo的副本集(3)

    一 简介:今天咱们来聊聊mongodb复制的具体一些案例 二 副本集 1 当mongodb采用全量复制时,如何观察全量复制的进度 对比文件本身和primary大小 2 mongodb全量复制的过程 旧 ...

  2. 为何invalidate()不可以直接在UI线程中调用&invalidate与postInvalidate

    1.android ui操作为什么一定要在主线程中执行? 答:Android UI操作是单线程模型,关于UI更新的相关API(包括invalidate())都是按照单线程设计的,对于多线程运行时不安全 ...

  3. js中创建数组,并往数组里添加元素

    数组的创建 var arrayObj = new Array(); //创建一个数组 var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限,是长 ...

  4. 3. SpringBoot ——自动配置原理浅析

    SpringBoot的功能之所以强大,离不开它的自动配置这一大特色.但估计很多人只是知其然而不知其所以然.下面本人对自动配置原理做一个分析: 在使用SpringBoot时我们通过引入不同的Starte ...

  5. 关于dubbo服务超时的讨论

    呵呵,偷点懒,直接把QQ上的讨论发下来. huxin  10:35:19你们现在超时了是咋办的,首先超时了,回复用户肯定是要的 huxin  10:36:14超时了用户实际是不知道这业务是成功还失败了 ...

  6. Linux RTC驱动模型分析之rtc-sysfs.c【转】

    转自:https://blog.csdn.net/longwang155069/article/details/52353408 版权声明:本文为博主原创文章,未经博主允许不得转载. https:// ...

  7. Memcache的安装和使用【转】

    转自:https://www.cnblogs.com/caoxiaojian/p/5715573.html Memcache是高性能,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问 ...

  8. CSDN沙龙记录

    Panel python踩过的坑 曹正: 原因:语言的理解不精准. 语言特性坑:函数的参数不可变类型的定义类似list[],惰性处理简而言之延后执行, 胡阳: gevent的问题,django连接池的 ...

  9. 使用位图字体工具BMFont从图片生成自定义字体

    转载自:http://blog.csdn.net/keshuiyun/article/details/9960667 BMFont下载地址: http://www.angelcode.com/prod ...

  10. 题解-POI2007 OSI-Axes of Symmetry

    Problem bzoj1100 题意概要:给定一个简单多边形(不一定凸),求其对称轴数量 数据组数\(\leq 10\),多边形点数\(\leq 10^5\) Solution 这题算是跨界算法的经 ...