【UOJ#188】Sanrd(min_25筛)

题面

UOJ

题解

今天菊开讲的题目。(千古神犇陈菊开,扑通扑通跪下来)

题目要求的就是所有数的次大质因子的和。

这个部分和\(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筛)的更多相关文章

  1. UOJ #188 Sanrd —— min_25筛

    题目:http://uoj.ac/problem/188 参考博客:https://www.cnblogs.com/cjoieryl/p/10149748.html 关键是枚举最小质因子...所以构造 ...

  2. UOJ188 Sanrd Min_25筛

    传送门 省选之前做数论题会不会有Debuff啊 这道题显然是要求\(1\)到\(x\)中所有数第二大质因子的大小之和,如果不存在第二大质因子就是\(0\) 线性筛似乎可以做,但是\(10^{11}\) ...

  3. UOJ188. 【UR #13】Sanrd [min_25筛]

    传送门 思路 也可以算是一个板题了吧qwq 考虑min_25筛最后递归(也就是DP)的过程,要枚举当前最小的质因子是多少. 那么可以分类讨论,考虑现在这个质因子是否就是次大质因子. 如果不是,那么就是 ...

  4. 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 \) ...

  5. 「uoj#188. 【UR #13】Sanrd」

    题目 不是很能看懂题意,其实就是求\([l,r]\)区间内所有数的次大质因子的和 这可真是看起来有点鬼畜啊 这显然不是一个积性函数啊,不要考虑什么特殊的函数了 我们考虑Min_25筛的过程 设\(S( ...

  6. [复习]莫比乌斯反演,杜教筛,min_25筛

    [复习]莫比乌斯反演,杜教筛,min_25筛 莫比乌斯反演 做题的时候的常用形式: \[\begin{aligned}g(n)&=\sum_{n|d}f(d)\\f(n)&=\sum_ ...

  7. 数论(8):min_25 筛(扩展埃氏筛)

    min_25 筛介绍 我们考虑这样一个问题. \[ans=\sum_{i = 1}^nf(i)\\ \] 其中 \(1 \le n \le 10^{10}\) 其中 \(f(i)\) 是一个奇怪的函数 ...

  8. Min_25 筛与杜教筛

    杜教筛 \(\) 是 \(\) 的前缀和,\(\), \(\) 同理. 假设 \( × = ℎ\) ,并且 \(, \) 易求出,\(\) 难求出. 那么 \[H () = \sum_{ \cdot ...

  9. Min_25 筛小结

    Min_25 筛这个东西,完全理解花了我很长的时间,所以写点东西来记录一些自己的理解. 它能做什么 对于某个数论函数 \(f\),如果满足以下几个条件,那么它就可以用 Min_25 筛来快速求出这个函 ...

随机推荐

  1. c++中的stack实现

    通用.类型安全.模板 简直就是巧夺天工的例子

  2. [ASP.NET Core] 建置x86版本 (workaround)

    前言 本篇文章介绍如何建置ASP.NET Core项目的x86版本输出(workaround),为自己留个纪录也希望能帮助到有需要的开发人员. ASP.NET Core官网 步骤 首先到微软官网的「. ...

  3. gitlab runner 填坑记

    一.Gitlab Runner  CI/CD 错误: Couldn't connect to Docker daemon at http+docker://localhost - is it runn ...

  4. PHP手动环境搭建之WAMP

    第一步:安装apache程序 首先需要去Apache官网下载Apache2.4(http://httpd.apache.org/download.cgi),操作如下图所示: 下载完成后把它解压出来,然 ...

  5. Fedora 26/27/28网易云音乐安装

    信息从 https://www.southcity-oldboy.com/1474.html获取,感谢站长南城旧少年! 以下为前辈网页上的内容 1.安装 RPM Fusion 源 (free): ht ...

  6. Fluent Python: memoryview

    关于Python的memoryview内置类,搜索国内网站相关博客后发现对其解释都很简单, 我觉得学习一个新的知识点一般都要弄清楚两点: 1, 什么时候使用?(也就是能解决什么问题) 2,如何使用? ...

  7. Python中的构造函数

    Python中的构造函数是__init__函数.在Python中,子类如果定义了构造函数,而没有调用父类的,那么Python不会自动调用,也就是说父类的构造函数不会执行. 比如有test.py的mod ...

  8. Alpha阶段事后诸葛亮会议记录

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2324 组名:可以低头,但没必要 组长:付佳 组员:张俊余  李文涛  孙 ...

  9. 个人作业四:注册github

    注册Github账户 账户名称:liurunhan Github地址:https://github.com/liurunhan

  10. 基于DPDK的高效数据包捕获技术分析与应用

    被NFV的论文折磨了两天,今天上午看了两篇DPDK的综述. 传统的包捕获机制 1. BPF 两个组成部分:转发部分和过滤部分. 转发部分负责从链路层提取数据包并转发给过滤部分. 过滤部分根据过滤规则, ...