F. K-th Power 容斥,莫比乌斯
F. K-th Power
传送门:
牛客:https://ac.nowcoder.com/acm/contest/34866/F
cf:https://codeforces.com/group/5zHJ4CTyoU/contest/392060/problem/F
题意:求区间[l,r]中,不含有\(p^k\)因子的数字的个数。其中p是质数。
可以用容斥+莫比乌斯解决。
问题转换成求[1,r]和[1,l-1]含有\(p^k\)因子的数字的个数,然后相减。
对于求[l,r]中含有\(p^k\)因子数字的个数,设含有\(i^k\)因子的数字的个数为\(f(i)\)
则:\(ans=f(2)+f(3)+f(5)+...-f(2*3)-f(3*5)-f(2*5)...+f(2*3*5)...\)
所以对每个数统计出能由多少个不重复质数乘得,判断奇偶决定符号。如果由重复质数因子,则不是上式成员。
#include <bits/stdc++.h>
//#define ll long long
#define ll long long
const ll N = 1e7+10;
ll q_pow(ll a,ll b){
ll res=1;
while(b){
if(b&1)res=a*res;
a=a*a;
b>>=1;
}
return res;
}
ll q_sqrt(ll x,ll k){
ll l=0,r=1e9;
while(l<r){
ll m=(l+r+1)>>1;
if(q_pow(m,k)<=x){
l=m;
}
else r=m-1;
}
return l;
}
int pr[N];
bool ck[N];
std::vector<int>ve;
void init(){
for(int i=2;i<1e4;i++){
ll k=i*i;
for(ll j=k;j<N;j+=k)ck[j]=1;
}
for(ll i=2;i<N;i++){
if(!pr[i]){
ve.push_back(i);
for(ll j=i;j<N;j+=i)pr[j]++;
}
}
}
ll get(ll p,ll k){
if(k>60||p<2)return 0;
ll m=q_sqrt(p,k);
ll ans=0;
for(int i=2;i<N&&q_pow(i,k)<=p;i++){
if(ck[i])continue;
if(pr[i]&1)ans+=(p/q_pow(i,k));
else ans-=(p/q_pow(i,k));
}
return ans;
}
signed main(){
//std::ios::sync_with_stdio(false);
init();
ll l,r,k;
std::cin>>l>>r>>k;
std::cout<<r-l+1-(get(r,k)-get(l-1,k))<<"\n";
}
F. K-th Power 容斥,莫比乌斯的更多相关文章
- 【二分+容斥+莫比乌斯反演】BZOJ2440 完全平方数
Description 求第k个没有完全平方因子的数,k<=1e9. Solution 这其实就是要求第k个µ[i](莫比乌斯函数)不为0的数. 然而k太大数组开不下来是吧,于是这么处理. 二分 ...
- AGC 005D.~K Perm Counting(容斥 DP 二分图)
题目链接 \(Description\) 给定\(n,k\),求 满足对于所有\(i\),\(|a_i-i|\neq k\)的排列的个数. \(2\leq n\leq 2000,\quad 1\leq ...
- HDU 5942 Just a Math Problem 容斥 莫比乌斯反演
题意:\( g(k) = 2^{f(k)} \) ,求\( \sum_{i = 1}^{n} g(i) \),其中\( f(k)\)代表k的素因子个数. 思路:题目意思很简单,但是着重于推导和简化,这 ...
- 广东工业大学2016校赛决赛-网络赛 1174 Problem F 我是好人4 容斥
Problem F: 我是好人4 Description 众所周知,我是好人!所以不会出太难的题,题意很简单 给你n个数,问你1000000000(含1e9)以内有多少个正整数不是这n个数任意一个的倍 ...
- 51nod 1355 - 斐波那契的最小公倍数(Min-Max 容斥+莫比乌斯反演)
vjudge 题面传送门 首先我们知道斐波那契数列的 lcm 是不太容易计算的,但是它们的 gcd 非常容易计算--\(\gcd(f_x,f_y)=f_{\gcd(x,y)}\),该性质已在我的这篇博 ...
- cf900D. Unusual Sequences(容斥 莫比乌斯反演)
题意 题目链接 Sol 首先若y % x不为0则答案为0 否则,问题可以转化为,有多少个数列满足和为y/x,且整个序列的gcd=1 考虑容斥,设\(g[i]\)表示满足和为\(i\)的序列的方案数,显 ...
- BZOJ2440(容斥+莫比乌斯函数)
题目本质: 首先有如下结论: 而通过写一写可以发现: 举例来讲,36及其倍数的数,会被1的倍数加一遍,被4的倍数扣一遍,会被9的倍数扣一遍,而为了最终计数为0,需要再加回来一遍,所以在容斥里面是正号. ...
- 4.19 ABC F path pass i 容斥 树形dp
LINK:path pass i 原本想了一个点分治 yy了半天 发现重复的部分还是很难减掉 况且统计答案的时候有点ex. (点了别人的提交记录 发现dfs就过了 于是yy了一个容斥 发现可以直接减掉 ...
- CROC 2016 - Elimination Round (Rated Unofficial Edition) F - Cowslip Collections 数论 + 容斥
F - Cowslip Collections http://codeforces.com/blog/entry/43868 这个题解讲的很好... #include<bits/stdc++.h ...
- bzoj 2986: Non-Squarefree Numbers【容斥+莫比乌斯函数】
看到\( 10^10 \)的范围首先想到二分,然后把问题转化为判断\( [1,n] \)内有多少个是某个质数的平方和的数. 所以应该是加上是一个质数的平方的个数减去是两个质数的平方的个数加上是三个质数 ...
随机推荐
- 代码and截图
1.babassl ZUC算法代码: #include <stdio.h> #include <string.h> #include <openssl/crypto.h& ...
- 封装ajax、获取上一页面传参的方法
1.封装ajax var defaultUrl = 'http://192.168.1.1:3000/' function post_data(url,data,successfn,errorfn){ ...
- 同一系统开启两个ftp进程
1.正常情况是yum 安装vsftpd服务 ,在/etc/vsftpd目录更改配置,起服务.这样启动是一个服务. 2.启动第二个vsftpd服务 #创建虚拟用户 useradd -d /home/vi ...
- 常用的DOS指令及部分快捷键
常用的DOS指令及部分快捷键 1.dos打开方式 win + R打开运行,输入cmd,打开dos 2.常用的Dos指令 a.切换盘号 方法 直接输入对应盘加" :" D: ...
- 比较有趣的C语言小程序
1.判断是否是闰年: #include <stdio.h> int main(void) { int year, a; printf("Please enter ...
- docker-io安装报错
一般修改两个文件即可 1.文件 :/etc/docker/daemon.json { "storage-driver": "devicemapper" } 2. ...
- x-www-form-urlencoded请求封装
<dependency> <groupId>commons-httpclient</groupId> <artifactId>commons-httpc ...
- vite+vue3批量导入静态资源图片;动态绑定大量图片
vite版本:vite3:vue版本:vue3 打包上线后发现,动态绑定的图片皆失效. 单图可用 import 导入解决,但是若有大量图片,一一导入则耗时耗力. vue2+webpack 可用 req ...
- Excel如何默认禁用科学计数法?
微软论坛版主回复"无法默认禁用此功能",可在"设置单元格格式"-"自定义"-"类型"改为"0",去除 ...
- create-react-app react 使用dll抽离公共库,大幅缩减项目体积,及项目打包速度
1.安装依赖(clean-webpack-plugin.add-asset-html-webpack-plugin.webpack-cli) yarn add clean-webpack-plugin ...