看了Po神的题解一下子就懂了A了!

不过Po神的代码出锅了…solve中"d-temp"并没有什么用QwQQwQQwQ…应该把模数除以p^temp次方才行.

来自BZOJ讨论板的hack数据

hack data

1 5 3125 7812

正确输出应该是625, 但是很多人输出3125…

CODE

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL INF = 1e15;
inline LL qpow(LL a, LL b, LL c) {
LL re = 1;
while(b) {
if(b&1) re = re * a % c;
a = a * a % c; b >>= 1;
}
return re;
}
LL gcd(LL a, LL b) { return b ? gcd(b, a%b) : a; }
void exgcd(LL a, LL b, LL &x, LL &y) {
if(!b) { x = 1, y = 0; return; }
exgcd(b, a%b, y, x); y -= x*(a/b);
}
int prime[100], cnt;
inline void Factor(int N) {
cnt = 0;
for(int i = 2; i*i <= N; ++i)
if(N % i == 0) {
prime[++cnt] = i;
while(N % i == 0) N /= i;
}
if(N > 1) prime[++cnt] = N;
}
inline int Get_g(int p, int phi) { //找原根
Factor(phi);
for(int g = 2; ; ++g) {
bool flg = true;
for(int i = 1; i <= cnt; ++i)
if(qpow(g, phi/prime[i], p) == 1)
{ flg = 0; break; }
if(flg) return g;
}
}
map<int, int>myhash;
inline LL Baby_Step_Giant_Step(LL a, LL b, LL p) {
myhash.clear(); int m = int(sqrt(p) + 1);
LL base = b;
for(int i = 0; i < m; ++i) {
myhash[base] = i;
base = base * a % p;
}
base = qpow(a, m, p); LL tmp = 1;
for(int i = 1; i <= m+1; ++i) {
tmp = tmp * base % p;
if(myhash.count(tmp))
return i*m - myhash[tmp];
}
return -1;
}
inline LL solve(LL a, LL b, LL p, LL d, LL p_d) {
b %= p_d;
if(!b) return qpow(p, d-((d-1)/a+1), INF);
LL temp = 0;
while(b % p == 0) b /= p, ++temp, p_d /= p;
if(temp % a) return 0;
LL phi = p_d - p_d/p, g = Get_g(p_d, phi);
LL ind = Baby_Step_Giant_Step(g, b, p_d);
LL re = gcd(a, phi);
if(ind % re) return 0;
return re * qpow(p, temp-temp/a, INF);
}
int main() {
int T, a, b, k;
for(scanf("%d", &T); T; T--) {
scanf("%d%d%d", &a, &b, &k); k = k<<1|1;
LL ans = 1;
for(int i = 2; i*i <= k && ans; ++i)
if(k % i == 0) {
int d = 0, p_d = 1;
while(k % i == 0) k /= i, ++d, p_d *= i;
ans *= solve(a, b, i, d, p_d);
}
if(k > 1 && ans) ans *= solve(a, b, k, 1, k);
printf("%lld\n", ans);
}
}

BZOJ 2219 数论之神 (CRT推论+BSGS+原根指标)的更多相关文章

  1. BZOJ 2219: 数论之神

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2219 N次剩余+CRT... 就是各种奇怪的分类讨论.. #include<cstrin ...

  2. 【BZOJ】【2219】数论之神

    中国剩余定理+原根+扩展欧几里得+BSGS 题解:http://blog.csdn.net/regina8023/article/details/44863519 新技能get√: LL Get_yu ...

  3. 数论算法 剩余系相关 学习笔记 (基础回顾,(ex)CRT,(ex)lucas,(ex)BSGS,原根与指标入门,高次剩余,Miller_Rabin+Pollard_Rho)

    注:转载本文须标明出处. 原文链接https://www.cnblogs.com/zhouzhendong/p/Number-theory.html 数论算法 剩余系相关 学习笔记 (基础回顾,(ex ...

  4. BZOJ2219数论之神——BSGS+中国剩余定理+原根与指标+欧拉定理+exgcd

    题目描述 在ACM_DIY群中,有一位叫做“傻崽”的同学由于在数论方面造诣很高,被称为数轮之神!对于任何数论问题,他都能瞬间秒杀!一天他在群里面问了一个神题: 对于给定的3个非负整数 A,B,K 求出 ...

  5. bzoj2219: 数论之神

    #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...

  6. 【bzoj2219-数论之神】求解x^a==b(%n)-crt推论-原根-指标-BSGS

    http://www.lydsy.com/JudgeOnline/problem.php?id=2219 弄了一个晚上加一个午休再加下午一个钟..终于ac..TAT 数论渣渣求轻虐!! 题意:求解 x ...

  7. 数论入门2——gcd,lcm,exGCD,欧拉定理,乘法逆元,(ex)CRT,(ex)BSGS,(ex)Lucas,原根,Miller-Rabin,Pollard-Rho

    数论入门2 另一种类型的数论... GCD,LCM 定义\(gcd(a,b)\)为a和b的最大公约数,\(lcm(a,b)\)为a和b的最小公倍数,则有: 将a和b分解质因数为\(a=p1^{a1}p ...

  8. BZOJ2219 数论之神 数论 中国剩余定理 原根 BSGS

    原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ2219.html 题目传送门 - BZOJ2219 题意 求同余方程 $x^A\equiv B \pmo ...

  9. luogu 2480 古代猪文 数论合集(CRT+Lucas+qpow+逆元)

    一句话题意:G 的 sigma d|n  C(n d) 次幂  mod 999911659 (我好辣鸡呀还是不会mathjax) 分析: 1.利用欧拉定理简化模运算 ,将上方幂设为x,则x=原式mod ...

随机推荐

  1. cmake升级到3.10以上

    使用yun install cmake3 安装 ,不会覆盖centos7 cmake 1 添加cmake3 源 echo '[group_kdesig-cmake3_EPEL]name=Copr re ...

  2. poj1741(入门点分治)

    题目链接:https://vjudge.net/problem/POJ-1741 题意:给出一棵树,求出树上距离不超过k的点对数量. 思路:点分治经典题.先找重心作为树根,然后求出子树中所有点到重心的 ...

  3. idea的配置文件------application.properties和application.yml

    当application.yml 和 application.properties 两个文件同时存在的时候,application.properties的优先级是高于application.yml的, ...

  4. linux 软连接和 硬链接的区别

    Linux软链接硬链接的区别   ln是linux中又一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接.当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下 ...

  5. Linux系列(3):入门之正确的关机方法

    前言:在Windows(非NT主机系统)系统中,由于是单人假多任务的情况,所以即使你计算机关机,对于别人也没有丝毫影响!不过,在Linux下面,由于每个程序(或者服务)都是在在背景下执行,因此,在看不 ...

  6. c语言中int long float double 等类型所占字节及输出表示(转)

    16位编译器 char :1个字节 char*(即指针变量): 2个字节 short int : 2个字节 int: 2个字节 unsigned int : 2个字节 float: 4个字节 doub ...

  7. 老贾的幸福生活day 04

    变量 变量名的规则: 变量名由字母,数字,下划线组成 变量名不能以数字开头 变量名要具有可描述性 变量名要区分大小写 变量名禁止使用python关键字 变量名不能使用中文和拼音 变量名推荐写法: 驼峰 ...

  8. django进阶版4

    目录 1 Auth模块是什么 2 auth模块常用方法 authenticate() login(HttpRequest, user) logout(request) is_authenticated ...

  9. VUE-挂载点-实例成员-数据-过滤器-文本指令-事件指令-属性指令-表单指令-01

    目录 路飞项目 vue vue 导读 vue 的优势 渐进式框架 引入 vue 实例成员 - 挂载点 el js 对象(字典)补充 实例成员 - 数据 data 实例成员 - 过滤器 filters ...

  10. 安装 pybloomfilter

    1.在windows的cmd下,使用 pip install pybloomfiltermmap 命令安装,pybloomfiltermmap 时报错 ,错误信息如下 根据错误信息分析,报错原因是需要 ...