【GDOI2016模拟3.16】幂(容斥 + 模型复杂转化)
【GDOI2016模拟3.16】幂
\(X\in[1,A],Y\in[1,B]\),问:\(x^y\)的不用取值个数.
\(A,B\)都是\(10^9\)级别.
然后我们开搞.
首先,假设一个合法的\(x\)可以表示为\(x=\prod p_i^{q_i}\),那么令\(d=gcd(q_1,q_2...q_k)\)
假设\(d>1\),显然我们不需要单独考虑,因为它可以继续化简,我们找到最简的那个数然后去一次性处理.
那么此时所有情况都变成了\(d=1\).
此时再分两种情况讨论,因为我们现在实际上把问题转化为了:
\(x\in[1,A]\),\(y\in [1,B]\),求\((c^x)^y\)的不同个数.
然后这个问题显然当\(x>\sqrt{A}\)时贡献就是\(B\)。
所以题目转化为:
在\(x\in[1,\sqrt{A}],y\in[1,B]\)时,\((c^x)^y\)的不同个数.
于是我们可以正难则反,计算一下不合法的个数,假设\(k={log_x}^n\),那么问题又可以转化为:
\(x\in[1,k],y\in[1,B]\),\(xy\)的相同个数.
于是这个问题值得思考一下.
咱有一个经典套路:分块计算;
即把总范围\([1,KB]\)变成\(K\)块,每一块都长的像这样的形式:
\]
那么现在单独考虑每一块的贡献.
然后假设我们现在处理第\(i\)个块,那么如果其中某一个数可以被表示为\(x*y\)的形式.
则必定存在一个\(d\in [i,k]\),满足\(d|x*y\).
因为这样子就必定能满足\(x\in [1,K],y\in [1,B]\)这两个条件.
所以现在题目再次被转化:
等价于我们要求在区间\([(i-1)B+1,iB]\)范围内有多少个数是\([i,k]\)区间中某一个数的倍数.
这次转化以后我们发现问题就变得熟悉了...
因为\(B\)比较大,\(k\)貌似小,所以,,,, 这TM容斥一下不就好了??
但是,我们发现,\(k\)最大可能为\(30\),这意味着,\(2^{30}\)是接受不了的...
但是我们很容易想到,如果当乘上一个数的lcm没有变化之后,就不需要去弄.
这样子的话时间一下子就降了下来,反正怎么打都能过~
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#define ll long long
#define F(i, a, b) for (ll i = a; i <= b; i ++)
#define sqr(x) ((x) * (x))
const ll N = 5e5;
ll ans, sum;
ll A, B, up, P[N];
bool vis[N];
using namespace std;
void Init() {
#ifndef ONLINE_JUDGE
freopen("data.in", "r", stdin);
#endif
scanf("%lld%lld", &A, &B);
up = int(sqrt(A)) + 1;
ans = 1LL * (A - 1) * B + 1;
}
void GetPrime() {
F(i, 2, N - 1) {
if (!vis[i])
P[++ P[0]] = i;
F(j, 1, P[0]) {
if (P[j] * i >= N) break;
vis[P[j] * i] = 1;
if (i % P[j] == 0) break;
}
}
}
ll gcd(ll x, ll y){
return y == 0 ? x : gcd(y, x % y);
}
void dfs(ll x, ll v, ll st, ll en, ll g, ll k) {
if (x > k) {
sum += 1LL * (en / v - st / v) * g;
return;
}
if (x != gcd(v, x)) {
dfs(x + 1, v * x / gcd(v, x), st, en, g * (- 1), k);
dfs(x + 1, v, st, en, g, k);
}
}
ll Solve(ll x) {
ll cnt = -1;
for (ll tmp = 1; tmp <= A; tmp *= x, cnt ++);
sum = 0;
F(i, 2, cnt)
dfs(i, 1, (i - 1) * B, i * B, 1, cnt);
return sum;
}
void Doit() {
F(i, 2, up) {
ll tmp = i, yes = 0;
F(j, 1, P[0]) {
if (sqr(P[j]) > i) break;
ll cnt = 0;
while (tmp % P[j] == 0) tmp /= P[j], cnt ++;
yes = gcd(yes, cnt);
if (yes == 1) break;
}
if (tmp > 1 || yes == 1)
ans -= Solve(i);
}
printf("%lld\n", ans);
}
int main() {
Init();
GetPrime();
Doit();
}
【GDOI2016模拟3.16】幂(容斥 + 模型复杂转化)的更多相关文章
- bzoj 3930: [CQOI2015]选数【快速幂+容斥】
参考:https://www.cnblogs.com/iwtwiioi/p/4986316.html 注意区间长度为1e5级别. 则假设n个数不全相同,那么他们的gcd小于最大数-最小数,证明:则gc ...
- [CSP-S模拟测试]:阴阳(容斥+计数+递推)
题目传送门(内部题16) 输入格式 第一行两个整数$n$和$m$,代表网格的大小.接下来$n$行每行一个长度为$m$的字符串,每个字符若为$W$代表这个格子必须为阳,若为$B$代表必须为阴,若为$?$ ...
- CF285E Positions in Permutations(dp+容斥)
题意,给定n,k,求有多少排列是的 | p[i]-i |=1 的数量为k. Solution 直接dp会有很大的后效性. 所以我们考虑固定k个数字使得它们是合法的,所以我们设dp[i][j][0/1] ...
- [BZOJ3622]已经没有什么好害怕的了(容斥DP)
给定两个数组a[n]与b[n](数全不相等),两两配对,求“a比b大”的数对比“b比a大”的数对个数多k的配对方案数. 据说做了这题就没什么题好害怕的了,但感觉实际上这是一个套路题,只是很难想到. 首 ...
- hdu5072(鞍山regional problem C):容斥,同色三角形模型
现场过的第四多的题..当时没什么想法,回来学了下容斥,又听学长讲了一讲,终于把它过了 题目大意:给定n个数,求全部互质或者全部不互质的三元组的个数 先说一下同色三角形模型 n个点 每两个点连一条边(可 ...
- HUST 1569(Burnside定理+容斥+数位dp+矩阵快速幂)
传送门:Gift 题意:由n(n<=1e9)个珍珠构成的项链,珍珠包含幸运数字(有且仅由4或7组成),取区间[L,R]内的数字,相邻的数字不能相同,且旋转得到的相同的数列为一种,为最终能构成多少 ...
- 2017ACM暑期多校联合训练 - Team 8 1011 HDU 6143 Killer Names (容斥+排列组合,dp+整数快速幂)
题目链接 Problem Description Galen Marek, codenamed Starkiller, was a male Human apprentice of the Sith ...
- [JZOJ 5894] [NOIP2018模拟10.5] 同余方程 解题报告(容斥)
题目链接: http://172.16.0.132/senior/#contest/show/2523/0 题目: 题解:(部分内容来自https://blog.csdn.net/gmh77/arti ...
- [CSP-S模拟测试]:连连看(图论+容斥)
题目传送门(内部题74) 输入格式 输入文件$link.in$ 第一行三个整数$n,m,k$,之间用空格隔开,$n,m$表示地图行数和列数,$k$表示每个方块周围相邻的位置(至多有$4$个,至少有$2 ...
随机推荐
- input输入限制,只允许输入数字和“.”,长度不得超过20
<input style="margin-top: 10px;width: 100%;text-align:center;" id="removeArea" ...
- win7 64 位操作系统,进程System,PID为4,扫描连接局域网ip地址的139和445端口
偶然发现电脑的System进程不间断扫描连接局域网内的其它IP对应的445和139端口,这是个问题. 上网搜索,立即关闭139端口的监听. 方法如下: 本地连接属性-TCP/IP属性-高级-WINS选 ...
- MongoDB更需要好的模式设计 及 案例赏析
一 挑战 设计从来就是个挑战. 当我们第一次接触数据库,学习数据库基础理论时,都需要学习范式,老师也一再强调范式是设计的基础.范式是这门课程中的重要部分,在期末考试中也一定是个重要考点.如果我们当年 ...
- Python函数(一)之杵臼之交
Python函数 函数的作用:对功能进行封装,减少重复代码,方便维护,流程清晰明了,易于理解. 函数的结构: def 函数名(): 函数体 return语句 函数的返回值: 可以 ...
- deepin 15.8桌面系统
深度桌面环境是深度科技自主开发的美观易用.极简操作的桌面环境,主要由桌面.启动器.任务栏.控制中心.窗口管理器等组成,系统中预装了 WPS Office.搜狗输入法.有道词典.网易云音乐以及深度特色应 ...
- Markdown语法指南
1.背景 个人比较喜欢用Markdonw写东西,比如写博客随笔,写有道云笔记等,但有的时候会突然忘记某个具体语法怎么写了,如插入图片.插入链接.表格等,那干脆把这个语法简单地总结一下,也方便日后快速查 ...
- SQL 撤销索引、表以及数据库
通过使用 DROP 语句,可以轻松地删除索引.表和数据库. SQL DROP INDEX 语句 我们可以使用 DROP INDEX 命令删除表格中的索引. 用于 Microsoft SQLJet (以 ...
- day19-网络编程基础(二)
今天没有很多概念性的东西,主要是方法性的东西以及编程的一些方法吧 今日份目录 1.UDP传输的特点以及实验 2.UTP与UDP传输的区别 3.基于tcp的low版带验证功能的FTP小程序 4.基于so ...
- Chrome Inspect调试微信出现404,需要FQ
要么FQ,要么买个程序 见连接 http://www.cnblogs.com/slmk/p/7591126.html
- UML 教程
UML 教程 关键词:部署图, 组件图, 包图, 类图, 复合结构图, 对象图, 活动图, 状态机图, 用例图, 通信图, 交互概述图, 时序图, 时间图 简介 部署图 组件图 包图 类图 复合结构图 ...