用于求解高次同余方程A^x≡B(mod C),其中C不一定是素数。

http://blog.csdn.net/tsaid/article/details/7354716

这篇题解写得最好。

那啥,这题的坑点请去看discuss。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long ll;
void exgcd(ll a,ll b,ll &d,ll &x,ll &y)
{
if(!b)
{
d=a;
x=1;
y=0;
}
else
{
exgcd(b,a%b,d,y,x);
y-=x*(a/b);
}
}
#define MAXN 100001
#define MOD 100003
struct HashTable
{
ll v[MAXN];
int __next[MAXN],first[MOD],en,a[MAXN];
void Insert(ll x,int J){
if(Find(x)!=-1){
return;
}
int o=x%MOD;
v[en]=x;
a[en]=J;
__next[en]=first[o];
first[o]=en++;
}
int Find(ll x){
int o=x%MOD;
for(int i=first[o];i!=-1;i=__next[i]){
if(v[i]==x){
return a[i];
}
}
return -1;
}
void Clear(){
memset(first,-1,sizeof(first));
en=0;
}
}T;
ll a,b,p;
int main(){
// freopen("d.in","r",stdin);
while(1){
scanf("%lld%lld%lld",&a,&p,&b);
if(a==0 && b==0 && p==0){
break;
}
T.Clear();
b%=p;
ll tmp,D=1;
int cnt=0;
bool flag=0;
while((tmp=__gcd(a,p))!=1){
if(b%tmp){
puts("No Solution");
flag=1;
break;
}
++cnt;
p/=tmp;
b/=tmp;
D=D*a/tmp%p;
}
if(flag){
continue;
}
int m=ceil(sqrt(p));
ll aj=1;
T.Insert(aj,0);
for(int j=1;j<=m;++j){
aj=(a%p*aj)%p;
T.Insert(aj,j);
}
for(int i=0;i<=m;++i){
ll x,y,d;
exgcd(D,p,d,x,y);
x=x*(b/d);
x=(x%(p/d)+p/d)%(p/d);
int J;
if((J=T.Find(x))!=-1){
printf("%lld\n",(ll)i*(ll)m+(ll)J+(ll)cnt);
flag=1;
break;
}
D=(D*aj)%p;
}
if(!flag){
puts("No Solution");
}
}
return 0;
}

【数论】【ex-BSGS】poj3243 Clever Y的更多相关文章

  1. poj3243 Clever Y[扩展BSGS]

    Clever Y Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 8666   Accepted: 2155 Descript ...

  2. luogu2485 [SDOI2011]计算器 poj3243 Clever Y BSGS算法

    BSGS 算法,即 Baby Step,Giant Step 算法.拔山盖世算法. 计算 \(a^x \equiv b \pmod p\). \(p\)为质数时 特判掉 \(a,p\) 不互质的情况. ...

  3. 【POJ3243】【拓展BSGS】Clever Y

    Description Little Y finds there is a very interesting formula in mathematics: XY mod Z = K Given X, ...

  4. bzoj 1467: Pku3243 clever Y 扩展BSGS

    1467: Pku3243 clever Y Time Limit: 4 Sec  Memory Limit: 64 MB[Submit][Status][Discuss] Description 小 ...

  5. [拓展Bsgs] Clever - Y

    题目链接 Clever - Y 题意 有同余方程 \(X^Y \equiv K\ (mod\ Z)\),给定\(X\),\(Z\),\(K\),求\(Y\). 解法 如题,是拓展 \(Bsgs\) 板 ...

  6. bzoj1467 Pku3243 clever Y

    1467: Pku3243 clever Y Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 313  Solved: 181[Submit][Status ...

  7. 【BZOJ1467/2480】Pku3243 clever Y/Spoj3105 Mod EXBSGS

    [BZOJ1467/2480]Pku3243 clever Y/Spoj3105 Mod Description 已知数a,p,b,求满足a^x≡b(mod p)的最小自然数x. Input      ...

  8. 【EX_BSGS】BZOJ1467 Pku3243 clever Y

    1467: Pku3243 clever Y Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 425  Solved: 238[Submit][Status ...

  9. 【POJ 3243】Clever Y 拓展BSGS

    调了一周,我真制杖,,, 各种初始化没有设为1,,,我当时到底在想什么??? 拓展BSGS,这是zky学长讲课的课件截屏: 是不是简单易懂.PS:聪哥说“拓展BSGS是偏题,省选不会考,信我没错”,那 ...

随机推荐

  1. C# 文件类的操作---删除

    //删除文件夹 1这是最简单的方法 DirectoryInfo di = new DirectoryInfo(string Path); di.Delete(true); 注:path是你要删除的非空 ...

  2. 设计模式之Builder

    设计模式总共有23种模式这仅仅是为了一个目的:解耦+解耦+解耦...(高内聚低耦合满足开闭原则) 介绍: Builder模式是一步一步创建一个复杂的对象,它允许用户可以只通过指定复杂对象. 将一个复杂 ...

  3. javascript性能

    1.js文件放在底部 js文件具有阻塞机制,放在头部,需要等待js下载解析完毕之后才能下载渲染页面,因此需要放在底部

  4. Ubuntu 14.04 ThinkPad E431无线网卡驱动安装

    Ubuntu 14.04下安装无线网卡驱动. sudo apt-get install linux-headers-generic build-essential dkms  sudo apt-get ...

  5. device tree --- #interrupt-cells property

    device tree source Example1 interrupt-controller@e000e100 { ... ... #interrupt-cells = <0x1>; ...

  6. Bookmarks www

    Bookmarks alexis- (Alex Incogito) - Repositories · GitHub GitHub - aetcnc-Arduino_DeltaHMI_RS485 Ope ...

  7. Android 开发之避免被第三方使用代理抓包

    现象:charles抓不到包,但wireshark,HttpAnalyzor可以抓到包. 关键代码: URL url = new URL(urlStr); urlConnection = (HttpU ...

  8. how to create view (windows)

    View Server List  IP address: 200.xx.xx.xx How to create a new view ssh new view server by your Unix ...

  9. Nginx-1.6.3反向代理

    源码安装nginx cat /etc/redhat-release uname -rm yum install pcre-devel openssl-devel -y rpm -qa pcre pcr ...

  10. Freemarker的页面和JS遍历后台传入的Map

    后端传到前端的Map Freemarker页面遍历Map: JS遍历Map: