SemiPerfectPower Solution

news/2025/2/21 10:13:23/文章来源:https://www.cnblogs.com/Yui-Hirasawa/p/18728703

同载于 洛谷。

SemiPerfectPower

问区间 \([l,r]\) 中能表示成形如 \(n=ab^c \land a < b \land c>1\) 的数的数量。

\(l \le r \le 5 \cdot 10^6\)

模拟赛把这个放 T1 家里得请哈基高了。

不容易发现 \(c=2,3\) 的数是完全的。

\(c>3\) 时,若 \(c\) 为偶数 \(a(b^{\frac c 2})^2\) 也是合法方案,若为奇数则 \((ab)(b^{\frac {c-1} 2})^2\)

\(P_k(n)=[n\ 没有\ k\ 次因子]\)

钦定 \(ab^c\)\(P_c(a)=1\) 以确定唯一表示。

单独 \(c=2\) 是好求的,枚举 \(a\) 得到 \(\sum_{a=1}^{n^{\frac 1 3}} P_2(a)(\sqrt{\frac n a}-a)\),式子里的 \(P_k\) 可预处理。

容斥求答案,考虑两种形式都满足的数。

\(ab^3=(ab)b^2=(\frac {ab} {k^2})(bk)^2\),其中 \(k^2\)\(ab\) 最大平方因子,或者说 \(k^2 | ab \land P_2(\frac {ab} {k^2})\)

这说明统计 \(c=3\) 时要保证 \(\frac {ab} {k^2} \ge bk \rightarrow k^3 \le a\)

现在要算:

\[\sum_{a=1}^{n^{\frac 1 3}} P_3(a) \sum_{k=1}^{a^\frac 1 3} \sum_{b=a+1}^{(\frac n a)^{\frac 1 3}} P_2(\frac {ab} {k^2})[k^2|ab] \]

考虑把后面那坨化成两个变量的关系。

\(a,k^2\) 的公因子先提了,\(g=\gcd(a,k^2)\ ,\ k'=\frac {k^2} g\ ,\ a'=\frac a g\)

\[P_2(\frac {ab} {k^2})[k^2|ab] = P_2(\frac {a'b} {k'})[k'|b] \]

常规地,令 \(b=k't\),枚举 \(t\)

最后一个求和变成:

\[\sum_{t=\frac {a'} k +1}^{\frac {(\frac n a)^{\frac 1 3}} {k'}} P_2(a't) \]

显然 \(P_k\) 是积性函数。

\[P_2(a't)=P_2(a')P_2(t)[\gcd(a',t)=1] \]

很好,可以莫反。

\[\begin{aligned} {} &\sum_k P_2(a') \sum_t P_2(t) \sum_{d|a',d|t} \mu(d)& \\ = &\sum_k P_2(a') \sum_{d|a'} \mu(d) \sum_t P_2(t)[d|t]& \\ = &\sum_k P_2(a') \sum_{d|a'} \mu(d) \sum_{t'=\frac a{k'd} +1}^{\frac {(\frac n a)^{\frac 1 3}} {k'd}} P_2(t'd) &\\ \end{aligned} \]

枚举 \(k,d\) 复杂度是 1/3 power 和 ln 级别的,最后一个求和预处理。总时间复杂度是 \(O(n^{\frac 1 3}\ln {n^{\frac 1 3}})\)

代码

#include <bits/stdc++.h>
#define fi first
#define se second
using namespace std;
using ll=long long;
using pii=pair<int,int>;
const int N=1e6+5;
int mu[N],p2[N],p3[N]; vector<ll>d[N],c[N];
inline ll P(ll x,int y){ return x*x*(y&1?x:1)*(y&4?x*x:1); }
ll npow(ll x,int k){ll r=pow(x,1./k)+10,l=r-20,mid;while(l<r) mid=l+r+1>>1,P(mid,k)<=x?l=mid:r=mid-1;return l;
}
void init(ll n){ll n3=npow(n,3)+1,n4=npow(n,4)+1;mu[1]=1;for(ll i=1;i<=n3;i++){for(ll j=i<<1;j<=n3;j+=i)mu[j]-=mu[i];c[i].resize(n3/i+1);p2[i]=!!mu[i],p3[i]=1;}for(ll i=2;i*i*i<=n4;i++)for(ll t=i*i*i,j=t;j<=n4;j+=t) p3[j]=0;for(ll i=1;i<=n3;i++){for(ll j=i;j<=n3;j+=i)d[j].push_back(i);if(p2[i]) for(ll j:d[i]) c[j][i/j]=1;}for(ll i=1;i<=n4;i++){ll lst=0; for(ll &j:c[i]) j+=lst,lst=j;}
}
ll solve(ll n){ll ans=0,n3=npow(n,3),n4=npow(n,4);for(ll a=1;a<=n3;a++) if(p2[a]) ans+=npow(n/a,2)-a;for(ll a=1;a<=n4;a++) if(p3[a])for(ll k=1;k*k*k<=a;k++){ll g=__gcd(a,k*k),_a=a/g,_k=k*k/g;if(!p2[_a]) continue; ll l=a/_k,r=npow(n/a,3)/_k;for(ll D:d[_a]) ans+=mu[D]*(c[D][r/D]-c[D][l/D]);}return ans;
}
int main(){freopen("power.in","r",stdin);freopen("power.out","w",stdout);init(8e16);int T; scanf("%d",&T);while(T--){ll l,r; scanf("%lld%lld",&l,&r);printf("%lld\n",solve(r)-solve(l-1));} return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/887489.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

打造专属任务管理利器:智慧工具私有化部署策略与实践

智慧任务管理工具私有化是指将智慧任务管理工具部署在组织内部的私有服务器或云环境中,以确保数据的安全性、隐私性和完全控制权。以下是对智慧任务管理工具私有化的详细解析: 一、私有化的优势 ● 数据安全:私有化部署确保所有数据存储在组织内部的服务器或私有云中,避免数…

牛客题解 | 设计LFU缓存结构

牛客输入输出题单题解题目 题目链接 题目的主要信息:实现LFU的set与get函数,且复杂度为\(O(1)\) 每次调用这两个函数会给一个频率赋值,超出长度则移除频率最少的,若有频率相同,则移除访问时间最早的举一反三: 学习完本题的思路你可以解决如下题目: BM100. 设计LRU缓存结…

牛客题解 | 设计LRU缓存结构

牛客输入输出题单题解题目 题目链接 题目的主要信息:实现LRU缓存的模拟结构,包括加入函数set,访问函数get 结构有长度限制,加入新数时,超出长度则需要删除最不常访问的,其中set与get都访问 两个函数都是\(O(1)\)举一反三: 学习完本题的思路你可以解决如下题目: BM101. …

牛客题解 | 编辑距离(一)

牛客输入输出题单题解题目 题目链接 题目主要信息:给定两个长度可能不同的字符串,可以对第一个字符串增删改字符 求增删改的最少次数,让第一个字符串变成第二个字符串 字符串中只出现大小写字母举一反三: 学习完本题的思路你可以解决如下题目: BM65 最长公共子序列(二) BM6…

网上学习导航

推荐一个网上学习好玩的地方 学吧导航 网站截图

解决 windows 安装centos7虚拟机 每隔一段时间 虚拟机ip会变动 怎么固定他的ip

查看当前虚拟机的ip地址:我的是192.168.217.136然后获取到网关ip:打开 VMware Workstation,选中你要设置的虚拟机,点击 “编辑” -> “编辑虚拟机设置”。通过ipconfig 可以看到我的是ens160 我的文件就是 ifcfg-ens160 ,然后使用以下命令进行操作sudo nano /etc/sysco…

牛客题解 | 求二叉树的层序遍历

牛客输入输出题单题解题目 题目链接 题目的主要信息:将给定二叉树按行从上到下、从左到右的顺序输出 输出到一个二维数组中,数组中每行就是二叉树的一层举一反三: 学习完本题的思路你可以解决如下题目: BM27. 按之字形顺序打印二叉树 BM35. 判断是否是完全二叉树 方法一:非…

牛客题解 | 没有重复项数字的全排列

牛客输入输出题单题解题目 题目链接 题目主要信息:给定一个数组,求这组数字的全排列 数组无重复元素 以数字在数组中的位置靠前为优先级,按字典序排列输出举一反三: 学习完本题的思路你可以解决如下题目: BM56. 有重复项数字的全排列 BM58. 字符串的排列 BM60. 括号生成 递…

牛客题解 | 最长无重复子数组

牛客输入输出题单题解题目 题目链接 题目主要信息:题目给定一个数组,要找到其中最长的无重复的子数组的长度 子数组必须是数组中连续的一段举一反三: 学习完本题的思路你可以解决如下题目: BM90. 最小覆盖子串 方法:滑动窗口(推荐使用) 知识点1:滑动窗口 滑动窗口是指在数…

牛客题解 | 最长的括号子串

牛客输入输出题单题解题目 题目链接 题目主要信息:一个长度为\(n\)的仅包含左右括号的字符串 计算最长的格式正确的括号子串的长度举一反三: 学习完本题的思路你可以解决如下题目: BM65 最长公共子序列(二) BM66.最长公共子串 BM71.最长上升子序列(一) BM73 最长回文子串 BM…

牛客题解 | 最长公共前缀

牛客输入输出题单题解题目 题目链接 题目主要信息:给定一个字符串数组,其中有n个字符串,求所有字符串的最长公共前缀 公共前缀是指所有字符串都共有的前面部分的子串,从第一个字符开始举一反三: 学会了本题的思路,你将可以解决类似的字符串问题: BM83. 字符串变形 BM85. …

牛客题解 | 旋转数组

牛客输入输出题单题解题目 题目链接 题目主要信息:一个长度为\(n\)的数组,将数组整体循环右移\(m\)个位置(\(m\)可能大于\(n\)) 循环右移即最后\(m\)个元素放在数组最前面,前\(n-m\)个元素依次后移 不能使用额外的数组空间举一反三: 学习完本题的思路你可以解决如下题目:…