BZOJ 2219: 数论之神
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2219
N次剩余+CRT。。。
就是各种奇怪的分类讨论。。
#include<cstring>
#include<iostream>
#include<cstdio>
#include<map>
#include<cmath>
#include<algorithm>
#define rep(i,l,r) for (int i=l;i<=r;i++)
#define down(i,l,r) for (int i=l;i>=r;i--)
#define clr(x,y) memset(x,y,sizeof(x))
#define maxn 50050
#define inf 2000000000
using namespace std;
int a,b,k,p,t,ans;
map<int,int> mp;
int read(){
int x=,f=; char ch=getchar();
while (!isdigit(ch)) {if (ch=='-') f=-; ch=getchar();}
while (isdigit(ch)) {x=x*+ch-''; ch=getchar();}
return x*f;
}
int Pow(int x,int y){
int ans=;
while (y){
if (y&) ans=1LL*ans*x;
x=1LL*x*x; y>>=;
}
return ans;
}
int Pow(int x,int y,int mo){
int ans=; while (y){
if (y&) ans=1LL*ans*x%mo;
x=1LL*x*x%mo; y>>=;
}
return ans;
}
int divs[maxn],dtot;
int groot(int p){//是对于p-1的每一个素因子a去检查(p-1)/a!!
dtot=;
int q=p-;
for (int i=;i*i<=q;i++){
if (q%i==) {
divs[++dtot]=i;
if (i*i!=q) divs[++dtot]=q/i;
}
}
for (int i=;i<p;i++){
int ok=;
rep(j,,dtot) if (Pow(i,divs[j],p)==) {ok=;break;}
if (!ok) return i;
}
}
int exgcd(int a,int b,int &x,int &y){
if (b==) {
x=; y=; return a;
}
int d=exgcd(b,a%b,y,x);
y-=a/b*x;
return d;
}
int gcd(int a,int b){
if (b==) return a;
return gcd(b,a%b);
}
int NI(int a,int b){
int x,y;
exgcd(a,b,x,y);
return (x%b+b)%b;
}
int bsgs(int a,int b,int p){
mp.clear();
int m=sqrt(p)+,mul,tmp;
int now=; rep(i,,m-) {if (!mp.count(now)) mp[now]=i; now=1LL*now*a%p;}
now=; mul=Pow(a,m,p);
rep(i,,m-){
tmp=1LL*b*NI(now,p)%p;
if (mp.count(tmp)) return mp[tmp]+i*m;
now=1LL*now*mul%p;
if (now==) break;
}
return inf;
}
int solve(int a,int b,int p,int d){
int pd=Pow(p,d);
b=b%pd;
if (b==) return Pow(p,d-((d-)/a+));
else {
int bet=;
while (b%p==) bet++,b/=p;
if (bet%a!=) return ;
int tt=bet/a;
int g=groot(p),phi=pd-pd/p;
int ind=bsgs(g,b,pd);
int d=gcd(a,phi);
if (ind%d==) return d*Pow(p,(a-)*tt);
else return ;
}
}
int main(){
t=read();
while (t--){
a=read(); b=read(); k=read();
p=*k+;
ans=;
for (int i=;i*i<=p&&ans;i++) if ((p%i)==) {
int now=; while ((p%i)==) p/=i,now++;
ans=ans*solve(a,b,i,now);
}
if (p!=&&ans) ans=ans*solve(a,b,p,);
printf("%d\n",ans);
}
return ;
}
BZOJ 2219: 数论之神的更多相关文章
- BZOJ 2219 数论之神 (CRT推论+BSGS+原根指标)
看了Po神的题解一下子就懂了A了! 不过Po神的代码出锅了-solve中"d-temp"并没有什么用QwQQwQQwQ-应该把模数除以p^temp次方才行. 来自BZOJ讨论板的h ...
- 【BZOJ】【2219】数论之神
中国剩余定理+原根+扩展欧几里得+BSGS 题解:http://blog.csdn.net/regina8023/article/details/44863519 新技能get√: LL Get_yu ...
- bzoj2219: 数论之神
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...
- BZOJ2219数论之神——BSGS+中国剩余定理+原根与指标+欧拉定理+exgcd
题目描述 在ACM_DIY群中,有一位叫做“傻崽”的同学由于在数论方面造诣很高,被称为数轮之神!对于任何数论问题,他都能瞬间秒杀!一天他在群里面问了一个神题: 对于给定的3个非负整数 A,B,K 求出 ...
- BZOJ2219 数论之神 数论 中国剩余定理 原根 BSGS
原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ2219.html 题目传送门 - BZOJ2219 题意 求同余方程 $x^A\equiv B \pmo ...
- 牛客国庆集训派对Day5 数论之神
题目描述 终于活成了自己讨厌的样子. 这是她们都还没长大的时候发生的故事.那个时候,栗子米也不需要为了所谓的爱情苦恼. 她们可以在夏日的午后,花大把的时间去研究生活中一些琐碎而有趣的事情,比如数论. ...
- BZOJ 4815 数论
今年的重庆省选? 具体就是,对于每次修改,A[p,q]这个位置, 设d=gcd(p,q) ,则 gcd为d的每一个格子都会被修改,且他们之间有个不变的联系 A[p,q]/p/q==A[k,t]/k/ ...
- BZOJ 1037 生日聚会(神DP)
这题的DP很难想,定义dp[i][j][a][b]表示用了i个男生,j个女生,任一连续的后缀区间内,男生比女生最多多a人,女生比男生最多多b人. 转移就是显然了. # include <cstd ...
- bzoj 1406 数论
首先问题的意思就是在找出n以内的所有x^2%n=1的数,那么我们可以得到(x+1)(x-1)=y*n,那么我们知道n|(x+1)(x-1),我们设n=a*b,那么我们对于任意的a,我们满足n%a==0 ...
随机推荐
- 自定义结构化config文件
前言 开发过程中我们会经常使用到各种config文件,经常我们会使用appSettings进行设置所用的配置,但是随着配置量的增多,都放在appSettings里面明显是不合适的,一方面配置容易混乱, ...
- scala写算法-List、Stream、以及剑指Offer里部分题目基于scala解法
Stream(immutable) Stream是惰性列表.实现细节涉及到lazy懒惰求值.传名参数等等技术(具体细节详见维基百科-求值策略). Stream和List是scala中严格求值和非严格求 ...
- ArcGIS 网络分析[8] ArcObjects二次开发之底层网络分析开发
基于现有的线要素类.转弯要素类(在地理数据库的要素数据集中),要用AO做两件事: 1. 创建网络数据集(使用Geodatabase类库) 2. 执行网络分析(使用NetworkAnalyst类库) 在 ...
- 阅读MDN文档之层叠与继承(二)
目录 The cascade Importance Specificity Source order A note on rule mixing Inheritance Controlling inh ...
- Linux(CentOS6.5)下编译安装MySQL Community Server 5.7.12
组件 官方网站 直接下载地址 备注 mysql http://dev.mysql.com/downloads/mysql/ http://mirrors.sohu.com/mysql/MySQL- ...
- [编织消息框架][JAVA核心技术]动态代理应用1
前面几篇介绍,终于到了应用阶段啦,我们来做一个RPC来加强学过的知识 做基础核心时先确定解决什么问题,提供什么服务,同将来扩展等 rpc 分两部份,一个是调用者,另一方是服务提供者 调用者只关心那个服 ...
- 关于php中,记录日志中,将数组转为json信息记录日志时遇到的问题总结
1 中文编码化,无法看到具体的中文,如:你好 => \u4F60\u597D 解决方案:可以使用 json_encode($arr,JSON_UNESCAPED_UNICODE) 转义中文[ ...
- day 10 字符编码和文件处理 细节整理
pycharm是文本编辑器. 大概理解为: 输出到屏幕上的时候,是解码过的字符串,用 decode 处理的时候要编码成相应的流, encode 成你要用的格式就可以了 1 .字符编码: 字符==== ...
- dubbo源码—service export
在应用编写好服务并进行之后,dubbo负责将服务export出去,dubbo export服务的时候主要做了以下几件事: 将服务export到本地(根据scope的配置) 创建Invoker(启动本地 ...
- Linux入门篇(一)——文件
这一系列的Linux入门都是本人在<鸟哥的Linux私房菜>的基础上总结的基本内容,主要是记录下自己的学习过程,也方便大家简要的了解 Linux Distribution是Ubuntu而不 ...