【数论】【ex-BSGS】poj3243 Clever Y
用于求解高次同余方程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的更多相关文章
- poj3243 Clever Y[扩展BSGS]
Clever Y Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 8666 Accepted: 2155 Descript ...
- luogu2485 [SDOI2011]计算器 poj3243 Clever Y BSGS算法
BSGS 算法,即 Baby Step,Giant Step 算法.拔山盖世算法. 计算 \(a^x \equiv b \pmod p\). \(p\)为质数时 特判掉 \(a,p\) 不互质的情况. ...
- 【POJ3243】【拓展BSGS】Clever Y
Description Little Y finds there is a very interesting formula in mathematics: XY mod Z = K Given X, ...
- bzoj 1467: Pku3243 clever Y 扩展BSGS
1467: Pku3243 clever Y Time Limit: 4 Sec Memory Limit: 64 MB[Submit][Status][Discuss] Description 小 ...
- [拓展Bsgs] Clever - Y
题目链接 Clever - Y 题意 有同余方程 \(X^Y \equiv K\ (mod\ Z)\),给定\(X\),\(Z\),\(K\),求\(Y\). 解法 如题,是拓展 \(Bsgs\) 板 ...
- bzoj1467 Pku3243 clever Y
1467: Pku3243 clever Y Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 313 Solved: 181[Submit][Status ...
- 【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 ...
- 【EX_BSGS】BZOJ1467 Pku3243 clever Y
1467: Pku3243 clever Y Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 425 Solved: 238[Submit][Status ...
- 【POJ 3243】Clever Y 拓展BSGS
调了一周,我真制杖,,, 各种初始化没有设为1,,,我当时到底在想什么??? 拓展BSGS,这是zky学长讲课的课件截屏: 是不是简单易懂.PS:聪哥说“拓展BSGS是偏题,省选不会考,信我没错”,那 ...
随机推荐
- hdu 1241Oil Deposits(BFS)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1241 Oil Deposits Time Limit: 2000/1000 MS (Java/Othe ...
- setsockopt 详解
1. closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket: BOOL bReuseaddr=TRUE; setsockopt(s,SOL_SOCKET ...
- edittext 的一个案例
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android= ...
- [How to] UIScrollView的使用方法
1.简介 代码 延续前一个博客使用Xib来创建view,本文我们创建一个带有PageControlView的ScrollView的table的headView,如下图: 具有自动滚动: 具有拖拽完毕后 ...
- Mysql 数据库学习笔记04 函数
一.创建自定义函数 * 使用自定义函数,可以返回字符串.整型.实数或者其他类型: create [aggregate] function 名称 (参数列表) return type begin //函 ...
- django中使用第三方包实现定时任务
# 转载请留言联系 在做主页静态化的时候,需要定时生成主页HTML,以保持数据的最新. 定时任务可以用第三方包django-crontab来实现. 附上官方文档:https://pypi.org/pr ...
- linux命令(29):cd命令
例1:进入系统根目录 cd / cd ../.. // [直接退到当前根目录] 例2:使用 cd 命令进入当前用户主目录 cd 例3:跳转到指定目录 cd /home/test 例4:返回进入此目 ...
- 【hdoj_1398】SquareCoins(母函数)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1398 此题采用母函数的知识求解,套用母函数模板即可: http://blog.csdn.net/ten_s ...
- Laravel通过Swoole提升性能
1.安装配置laravel 1.1.composer下载laravel composer create-project --prefer-dist laravel/laravel blog " ...
- mybatis 报错: Invalid bound statement (not found)
错误: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): test.dao.Produc ...