【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 筛来快速求出这个函 ...
随机推荐
- 【Unity3d】ScriptableObject的简单用法
ScriptableObject非常适合小数量的游戏数值. 使用ScriptableObject的时候需要注意,生成ScriptableObject数据文件需要自己写Editor代码实现. 大概的 ...
- 跨越适配&性能那道坎,企鹅电竞Android weex优化
WeTest 导读 企鹅电竞从17年6月接入weex,到现在已经有一年半的时间,这段时间里面,针对遇到的问题,企鹅电竞终端主要做了下面的优化: image组件 预加载 预渲染 Image组件 weex ...
- HttpServletResponse 之 sendError( )
直接返回http 401状态,提示重新登录 response.sendError(401, "当前账户未登录或会话失效,请重新登录!) HTTP状态码列表: 100Continue继续.客户 ...
- Spark SQL、DataFrame和Dataset——转载
转载自: Spark SQL.DataFrame和Datase
- [C++] Solve "No source available for main()" error when debugging on Eclipse
In Mac, the issue image: 1. A existing cmake project on disk 2. import this project into Eclipse. 3 ...
- Linux中打开文件管理器的命令
在Mac中,我们可以使用open命令,在终端打开指定目录下的文件管理器,在Linux中,同样可以使用类似的命令:nautilus.
- DoItYourself!
在杨老师的勉励下,我准备开始“自己”写程序.速度很慢,不过在写的过程中对于用到的几个函数更加熟悉.也尝试多学一点,学透一点.遇到不会的函数,语法不清楚的,还是会百度,不过会自己再敲一遍.重复下去. 下 ...
- c# printDialog不显示问题
1.遇到问题:同样的代码,一个可以运行成功,另一个失败.百思不得其解情况下,监视下看每一个参数的属性是否一样,但参数太多,需要时间. 主要问题一般归结为:两个项目的属性编译设置不同,果然,一个x86正 ...
- 每日scrum--No.1
Yesterday:无 Today: 查找学校的官方地图和亲自测试其准确性 Problem :不能使地图适应我们的软件;未解决地图上存在的问题: 明天继续加油.
- DFS(DP)---POJ 1014(Dividing)
原题目:http://poj.org/problem?id=1014 题目大意: 有分别价值为1,2,3,4,5,6的6种物品,输入6个数字,表示相应价值的物品的数量,问一下能不能将物品分成两份,是两 ...