【UOJ#188】Sanrd(min_25筛)
【UOJ#188】Sanrd(min_25筛)
题面
题解
今天菊开讲的题目。(千古神犇陈菊开,扑通扑通跪下来)
题目要求的就是所有数的次大质因子的和。
这个部分和\(min\_25\)筛中枚举最小值因子有异曲同工之妙。
min_25筛什么的戳这里
并且这题并没有积性函数。
所以我们先筛出质数个数。
然后考虑如何计算答案\(S(n,1)\)
首先看初值,假设当前计算的是\(S(x,y)\)
表示的是\([1,x]\)中,所有最小质因子大于等于\(Prime_y\)的贡献
所有质数的贡献显然是\(0\),我们考虑计算合数的答案。
枚举最小质因子以及这个质因子的次幂,在只剩下两个质因子的时候统计答案。
既然只剩下两个质因子,那么需要计算的就是\(x\)中所有大于等于\(Prime_y\)的质数。
因为\(S(x,y)\)一定右\(S(?,y-1)\)转移过来
那么它的次小质因子就是\(Prime_{y-1}\),直接计算即可。
还需要额外考虑\(p^k\)的贡献就是\(p\)
#include<iostream>
#include<cmath>
using namespace std;
#define ll long long
#define MAX 1000000
ll L,R,ans,w[MAX],g[MAX],Sqr;
int id1[MAX],id2[MAX],m,pri[MAX],tot;
bool zs[MAX];
void pre(int n)
{
for(int i=2;i<=n;++i)
{
if(!zs[i])pri[++tot]=i;
for(int j=1;j<=tot&&i*pri[j]<=n;++j)
{
zs[i*pri[j]]=true;
if(i%pri[j]==0)break;
}
}
}
ll S(ll n,ll x,int y)
{
if(x<=1||pri[y]>x)return 0;
int k=(x<=Sqr)?id1[x]:id2[n/x];
ll ret=1ll*pri[y-1]*(g[k]-y+1);
for(int i=y;i<=tot&&1ll*pri[i]*pri[i]<=x;++i)
{
ll p1=pri[i],p2=1ll*pri[i]*pri[i];
for(int e=1;p2<=x;++e,p1=p2,p2*=pri[i])
ret+=S(n,x/p1,i+1)+pri[i];
}
return ret;
}
ll Solve(ll n)
{
tot=m=0;pre(Sqr=sqrt(n));
for(ll i=1,j;i<=n;i=j+1)
{
j=n/(n/i);w[++m]=n/i;g[m]=w[m]-1;
if(w[m]<=Sqr)id1[w[m]]=m;
else id2[j]=m;
}
for(int j=1;j<=tot;++j)
for(int i=1;i<=m&&1ll*pri[j]*pri[j]<=w[i];++i)
{
int k=(w[i]/pri[j]<=Sqr)?id1[w[i]/pri[j]]:id2[n/(w[i]/pri[j])];
g[i]-=g[k]-j+1;
}
return S(n,n,1);
}
int main()
{
cin>>L>>R;
cout<<Solve(R)-Solve(L-1)<<endl;
return 0;
}
【UOJ#188】Sanrd(min_25筛)的更多相关文章
- UOJ #188 Sanrd —— min_25筛
题目:http://uoj.ac/problem/188 参考博客:https://www.cnblogs.com/cjoieryl/p/10149748.html 关键是枚举最小质因子...所以构造 ...
- UOJ188 Sanrd Min_25筛
传送门 省选之前做数论题会不会有Debuff啊 这道题显然是要求\(1\)到\(x\)中所有数第二大质因子的大小之和,如果不存在第二大质因子就是\(0\) 线性筛似乎可以做,但是\(10^{11}\) ...
- UOJ188. 【UR #13】Sanrd [min_25筛]
传送门 思路 也可以算是一个板题了吧qwq 考虑min_25筛最后递归(也就是DP)的过程,要枚举当前最小的质因子是多少. 那么可以分类讨论,考虑现在这个质因子是否就是次大质因子. 如果不是,那么就是 ...
- UOJ 188 【UR #13】Sanrd——min_25筛
题目:http://uoj.ac/problem/188 令 \( s(n,j)=\sum\limits_{i=1}^{n}[min_i>=p_j]f(j) \) ,其中 \( min_i \) ...
- 「uoj#188. 【UR #13】Sanrd」
题目 不是很能看懂题意,其实就是求\([l,r]\)区间内所有数的次大质因子的和 这可真是看起来有点鬼畜啊 这显然不是一个积性函数啊,不要考虑什么特殊的函数了 我们考虑Min_25筛的过程 设\(S( ...
- [复习]莫比乌斯反演,杜教筛,min_25筛
[复习]莫比乌斯反演,杜教筛,min_25筛 莫比乌斯反演 做题的时候的常用形式: \[\begin{aligned}g(n)&=\sum_{n|d}f(d)\\f(n)&=\sum_ ...
- 数论(8):min_25 筛(扩展埃氏筛)
min_25 筛介绍 我们考虑这样一个问题. \[ans=\sum_{i = 1}^nf(i)\\ \] 其中 \(1 \le n \le 10^{10}\) 其中 \(f(i)\) 是一个奇怪的函数 ...
- Min_25 筛与杜教筛
杜教筛 \(\) 是 \(\) 的前缀和,\(\), \(\) 同理. 假设 \( × = ℎ\) ,并且 \(, \) 易求出,\(\) 难求出. 那么 \[H () = \sum_{ \cdot ...
- Min_25 筛小结
Min_25 筛这个东西,完全理解花了我很长的时间,所以写点东西来记录一些自己的理解. 它能做什么 对于某个数论函数 \(f\),如果满足以下几个条件,那么它就可以用 Min_25 筛来快速求出这个函 ...
随机推荐
- c++中的stack实现
通用.类型安全.模板 简直就是巧夺天工的例子
- [ASP.NET Core] 建置x86版本 (workaround)
前言 本篇文章介绍如何建置ASP.NET Core项目的x86版本输出(workaround),为自己留个纪录也希望能帮助到有需要的开发人员. ASP.NET Core官网 步骤 首先到微软官网的「. ...
- gitlab runner 填坑记
一.Gitlab Runner CI/CD 错误: Couldn't connect to Docker daemon at http+docker://localhost - is it runn ...
- PHP手动环境搭建之WAMP
第一步:安装apache程序 首先需要去Apache官网下载Apache2.4(http://httpd.apache.org/download.cgi),操作如下图所示: 下载完成后把它解压出来,然 ...
- Fedora 26/27/28网易云音乐安装
信息从 https://www.southcity-oldboy.com/1474.html获取,感谢站长南城旧少年! 以下为前辈网页上的内容 1.安装 RPM Fusion 源 (free): ht ...
- Fluent Python: memoryview
关于Python的memoryview内置类,搜索国内网站相关博客后发现对其解释都很简单, 我觉得学习一个新的知识点一般都要弄清楚两点: 1, 什么时候使用?(也就是能解决什么问题) 2,如何使用? ...
- Python中的构造函数
Python中的构造函数是__init__函数.在Python中,子类如果定义了构造函数,而没有调用父类的,那么Python不会自动调用,也就是说父类的构造函数不会执行. 比如有test.py的mod ...
- Alpha阶段事后诸葛亮会议记录
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2324 组名:可以低头,但没必要 组长:付佳 组员:张俊余 李文涛 孙 ...
- 个人作业四:注册github
注册Github账户 账户名称:liurunhan Github地址:https://github.com/liurunhan
- 基于DPDK的高效数据包捕获技术分析与应用
被NFV的论文折磨了两天,今天上午看了两篇DPDK的综述. 传统的包捕获机制 1. BPF 两个组成部分:转发部分和过滤部分. 转发部分负责从链路层提取数据包并转发给过滤部分. 过滤部分根据过滤规则, ...