【BZOJ1467/2480】Pku3243 clever Y/Spoj3105 Mod EXBSGS
【BZOJ1467/2480】Pku3243 clever Y/Spoj3105 Mod
Description
Input
Output
Sample Input
2 4 3
0 0 0
Sample Output
No Solution
HINT
100%的数据,a,p,b≤1e9。
题解:EXBSGS
因为A和C不互质,所以我们令A,B,C同时除以gcd(A,C),得到的C'可能与A还不互质,所以我们再除上gcd(A,C'),直到A,C互质。
此时得到方程$A^{x-k}*{A^k\over g_1*g_2...g_k}=B'(mod C')$
将${A^k\over g_1*g_2...g_k}$除过去,然后套用BSGS即可。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <map>
#include <cmath>
using namespace std;
typedef long long ll;
map<int,int> mp;
int pm(int a,int b,int c)
{
int ret=1;
while(b)
{
if(b&1) ret=(ll)ret*a%c;
a=(ll)a*a%c,b>>=1;
}
return ret;
}
int gcd(int a,int b)
{
return b?gcd(b,a%b):a;
}
int BSGS(int a,int b,int c,int d)
{
int x,y,i;
mp.clear();
int M=ceil(sqrt(c));
for(x=b,i=0;i<=M;i++,x=(ll)x*a%c) mp[x]=i;
for(y=d,x=pm(a,M,c),i=1;i<=M;i++)
{
y=(ll)y*x%c;
int tmp=mp[y];
if(tmp) return (ll)i*M-tmp;
}
return -1;
}
void work(int a,int b,int c)
{
int A=1,k=0;
for(int i=0;(1<<i)<=c;i++)
{
if(pm(a,i,c)==b)
{
printf("%d\n",i);
return ;
}
}
while(1)
{
int g=gcd(a,c);
if(g==1) break;
if(b%g!=0)
{
printf("No Solution\n");
return ;
}
b/=g,c/=g,A=((ll)A*a/g)%c,k++;
}
int tmp=BSGS(a,b,c,A);
if(tmp==-1) printf("No Solution\n");
else printf("%d\n",tmp+k);
}
int main()
{
int a,b,c;
while(1)
{
scanf("%d%d%d",&a,&c,&b);
if(!a&&!b&&!c) return 0;
if(!a&&!b) printf("1\n");
else a%=c,b%=c,work(a,b,c);
}
}
【BZOJ1467/2480】Pku3243 clever Y/Spoj3105 Mod EXBSGS的更多相关文章
- 【EX_BSGS】BZOJ1467 Pku3243 clever Y
1467: Pku3243 clever Y Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 425 Solved: 238[Submit][Status ...
- bzoj1467 Pku3243 clever Y
1467: Pku3243 clever Y Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 313 Solved: 181[Submit][Status ...
- bzoj 1467: Pku3243 clever Y 扩展BSGS
1467: Pku3243 clever Y Time Limit: 4 Sec Memory Limit: 64 MB[Submit][Status][Discuss] Description 小 ...
- poj 3243 Clever Y && 1467: Pku3243 clever Y【扩展BSGS】
扩展BSGS的板子 对于gcd(a,p)>1的情况 即扩展BSGS 把式子变成等式的形式: \( a^x+yp=b \) 设 \( g=gcd(a,p) \) 那么两边同时除以g就会变成: \( ...
- 【POJ】3243 Clever Y
http://poj.org/problem?id=3243 题意:求$a^y \equiv b \pmod{p}$最小的$y$.(0<=x, y, p<=10^9) #include & ...
- 【数论】【ex-BSGS】poj3243 Clever Y
用于求解高次同余方程A^x≡B(mod C),其中C不一定是素数. http://blog.csdn.net/tsaid/article/details/7354716 这篇题解写得最好. 那啥,这题 ...
- 【iOS开发】iOS CGRectGetMaxX/Y 使用
在iOS的界面布局中我们可以使用CGRectGetMaxX 这个方法来方便的获取当前控件的x坐标值+宽度的数值,这样便可以方便布局. 同理CGRectGetMaxY是获取y坐标值+控件高度的值,当然这 ...
- 【小知识】比较 x^y 和 y^x 的大小
往前翻几个编号相邻的题目翻到了这么一道题,感觉很好奇就做了一下 (upd:我下午问了下出题人做法,他就把题隐藏了……这不太友好啊……所以我补一下题意:) 题意 给你两个整数 $x$ 和 $y$,求 $ ...
- 【POJ 2480】Longge's problem(欧拉函数)
题意 求$ \sum_{i=1}^n gcd(i,n) $ 给定 $n(1\le n\le 2^{32}) $. 链接 题解 欧拉函数 $φ(x)$ :1到x-1有几个和x互质的数. gcd(i,n) ...
随机推荐
- 头条PC端的鼠标经过图片放大效果
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 转载:linux编程,命令行参数输入getopt
下面资料来自百度百科: getopt(分析命令行参数) 相关函数 表头文件 #include<unistd.h> 定义函数 int getopt(int argc,char * const ...
- XA事务与MySQL
XA事务就是两阶段提交的一种实现方式 XA规范主要定义了事务管理器TM,和资源管理器RM之间的接口 根据2PC的规范,将一次事务分割成两个阶段 1. prepare阶段 TM向所有RM发送prepar ...
- 关于[WinError 10054] 远程主机强迫关闭了一个现有的连接。
之前一直用python实现qq邮箱自动发送,都弄的好好的,然后今天一打开,就出现如题的错误,百度了许多,说,可能发送邮件次数过多,被当作是攻击,建议换个邮箱,换了也不行, 最后用手机给电脑分享Wifi ...
- Codeforces 620E New Year Tree(线段树+位运算)
题目链接 New Year Tree 考虑到$ck <= 60$,那么用位运算统计颜色种数 对于每个点,重新标号并算出他对应的进和出的时间,然后区间更新+查询. 用线段树来维护. #includ ...
- k8s-pod的生命周期
1.pod资源-spec.containers - name:镜像运行起来之后叫容器,该字段为容器名 image:镜像名字 imagePullPolicy:表示从哪拉取镜像, Always:不管本地有 ...
- 从jar中读取资源文件的问题
在项目中遇到了一个问题,在IDE中读取配置文件的程序,打成架包以后,放到服务器上跑,报找不到资源文件的错误. 其中,资源文件的路径如下: 获取配置文件路径和读取的方法如下: private stati ...
- 【Jpa hibernate】一对多@OneToMany,多对一@ManyToOne的使用
项目中使用实体之间存在一对多@OneToMany,多对一@ManyToOne的映射关系,怎么设置呢? GitHub地址:https://github.com/AngelSXD/myagenorderd ...
- mac 安装scrapy
https://jingyan.baidu.com/article/14bd256e748346bb6d2612be.html 1.安装Python 安装完了记得配置环境,将python目录和pyth ...
- VS中的 MD/MT设置 【转】
VS系列工具作为目前微软主打的集成开发环境,在历经了近20多年的发展后,到如今已经可以 说是Windows平台上各种IDE环境中的翘楚了.很多别的开发工具已经难望其项背了,如今VS2010也已经面市很 ...