Codeforces 185D(发现性质、欧拉定理)
学到的东西
- 不知道gcd时不妨先假设为d,然后为了满足全部式子说不定可以得到d的取值范围。
- 幂上带幂考虑欧拉定理的使用。
- 有几个特殊情况会破坏公式的完美不要紧,看看特殊情况是否能简便地判定。
- 连乘公式,证明方法是右边分母乘到左边就都消了:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
int T, k, p;
ll l, r;
ll ksm(int a, ll b, int mod) {
ll res = 1;
for (; b; b >>= 1) {
if (b & 1) res = res * a % mod;
a = (ll)a * a % mod;
}
return res;
}
ll calc(int k, ll l, ll r, int p) {
if (k % p == 0) return 1;//欧拉定理的前提是k、p互质
ll t = ksm(2, l, p - 1);
ll q = (ksm(k, t, p) - 1 + p) % p;
if (!q) return ksm(2, r - l + 1, p);//分母为0
ll y = ksm(2, r + 1, p - 1);
ll res = (ksm(k, y, p) - 1 + p) % p * ksm(q, p - 2, p) % p;
return res;
}
int main() {
ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
for (cin >> T; T--;) {
cin >> k >> l >> r >> p;
if (p == 2) {
cout << (k % 2 ? 0 : 1) << '\n';
} else {
ll MUL = calc(k, l, r, p);
if (k % 2) {
MUL = MUL * ksm(ksm(2, r - l, p), p - 2, p) % p;
}
cout << MUL << '\n';
}
}
}
Codeforces 185D(发现性质、欧拉定理)的更多相关文章
- CodeForces 1063B. Labyrinth 性质
给定$n *m$的格子 询问从$(r, c)$开始最多向左走$x$步,向右走$y$步 询问有多少个格子可以从$(r, c)$到达 有障碍物,$n, m \leqslant 2 * 10^3$ 对于一个 ...
- 【BZOJ5071】[Lydsy十月月赛]小A的数字 发现性质
[BZOJ5071][Lydsy十月月赛]小A的数字 题解:一般遇到这种奇奇怪怪的操作,常用的套路是将原序列差分一下,或者求个前缀和什么的.本题就是直接对原序列求前缀和,然后发现一次操作相当于交换两个 ...
- Codeforces 1142A(性质、暴举)
队友和大佬都什么几种情况啥的……我是把终点都插了,起点随便选一个,暴举答案莽A. ; ll n, k, a, b, aa, minn = INF, maxx = -; set<ll> bb ...
- 「10.16晚」序列(....)·购物(性质)·计数题(DP)
A. 序列 考场不认真读题会死..... 读清题就很简单了,分成若干块,然后块内递增,块外递减,同时使最大的块长为$A$ B. 购物 考场思路太局限了,没有发现性质, 考虑将$a_{i}$,排序前缀和 ...
- 「模拟8.13」任(liu_runda的神题,性质分析)
考场时没有发现性质,用了个前缀和优化暴力,结果写WA了 我们发现其实联通块的个数就是点的个数-边的个数 然后我们需要维护横向上和纵向上的边的前缀和 前缀和的查询形式稍改一下 暴力 1 #include ...
- Week One
2018.11.21: 1.[BZOJ 4868][SHOI 2017] 从后往前枚举最后位置即可,如果$A<B$,用尽可能多的$A$替换$B$操作 Tip:很大的$C$可能爆$longlong ...
- NOIP2017 国庆郑州集训知识梳理汇总
第一天 基础算法&&数学 day1难度测试 如果要用一个词来形容上午的测试,那真是体无完肤. 成绩: 题目 成绩 评价 T1 50 一般 T2 10 大失所望 T3 0 差 基础算法 ...
- [Weekly] 2014.03.01-2014.03.08
这周写过好多东西,虽然还没有完全弄明白线段树,但是progress还是有的! 不过有时候真的很想哭,因为自己的梦想连别人看看韩剧.无所事事还要分量轻,实在不明白政治课的Teamwork意义何在,花两分 ...
- Treasure Hunt
Treasure Hunt time limit per test 1 second memory limit per test 256 megabytes input standard input ...
随机推荐
- html5--1.7超链接上
html5--1.7超链接上 一.超链接的5种形式 <!DOCTYPE html> <html lang="en"> <head> <me ...
- PostgreSQL与Oracle对应的函数
一.对应的函数 1.sysdate oracle pgsql sysdate current_date. current_timestamp nvl coalesce trunc date_trun ...
- codeforces 659B B. Qualifying Contest(水题+sort)
题目链接: B. Qualifying Contest time limit per test 1 second memory limit per test 256 megabytes input s ...
- codeforces 569B B. Inventory(水题)
题目链接: B. Inventory time limit per test 1 second memory limit per test 256 megabytes input standard i ...
- asteris录音设置
[macro-recording] exten =>s,1,Set(CALLFILENAME=${STRFTIME(${EPOCH},UTC-8,%Y-%m-%d-%H-%M-%S)}-${CA ...
- MySQL文本处理函数2_20160921
需求:从目前的 test_a03order 表里面提取出来产品规格,押金的数据 一.首先添加表字段我们在表里面添加这两个字段 命名为product_size,deposit 后期进行更新这两个字段内 ...
- win10系统下安装64位Oracle11g+LSQL Developer
LSQL Developer作为强大的Oracle编辑工具,却只支持32bit,本文提供在安装用LSQL Developer打开64bitOracle的操作方法 工具/原料 oracle11g安装包 ...
- elasticsearch2.x安装部署
目录 一.安装es以及插件 二.建立索引和映射,添加数据 三.备注 一.安装es以及插件 ElasticSearch-2.3.1版本,系统为CentOS 7.0位. 对应的网上下载地址都有: elas ...
- Unity3d笔记
当变量重命名后,已序列化保存的值会丢失,如果希望继续保留其数值,可使用FormerlySerializedAs,如下代码所示: [UnityEngine.Serialization.FormerlyS ...
- JDK的windows和Linux版本之下载
简单说下,Eclipse需要Jdk,MyEclipse有自带的Jdk,除非是版本要求 http://www.oracle.com/technetwork/java/javase/downloads/i ...