Description

给定 \(\sum_{i=l}^r f[i]\)

\(f[i]=\) 把 \(i\) 的每一个质因子都从小到大排列成一个序列(\(p_i^{c_i}\)要出现 \(c_i\) 次)后 , 第二大的质因子.

题面

Solution

符合 \(Min25\) 筛的处理顺序.

递归处理每个质因子作为次大值时的贡献,和不作为次大值时贡献的方案数 , 预处理一下区间质数个数就行了.

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e6+10;
ll w[N],c[N],n,p[N];int m=0,sqr,cnt=0;
inline int id(ll x){return x<=sqr?x:m-(n/x)+1;}
inline ll S(ll n,int k){
if(n<=p[k])return 0;
ll ret=p[k]*(c[id(n)]-c[p[k]]);
for(int i=k+1;i<=cnt && n/p[i]>=p[i];i++){
for(ll j=n;(j/=p[i])>=p[i];)ret+=S(j,i)+p[i];
}
return ret;
}
inline ll solve(ll now){
m=0,cnt=0,n=now,sqr=sqrt(n);
for(ll i=1,j;i<=n;i=j+1)w[++m]=j=n/(n/i),c[m]=j-1;
for(int i=2;i<=sqr;i++){
if(c[i]==c[i-1])continue;
p[++cnt]=i;
for(int j=m;w[j]/i>=i;j--)c[j]-=c[id(w[j]/i)]-c[i-1];
}
return S(n,0);
}
int main(){
freopen("pp.in","r",stdin);
freopen("pp.out","w",stdout);
ll l,r;
cin>>l>>r;
cout<<solve(r)-solve(l-1);
return 0;
}

最新文章

  1. android Studio 百度KEY获得发布版 SHA1 的方法
  2. linux下的服务器搭建集成环境
  3. 【hdu3948-不同回文串的个数】后缀数组
  4. AppStore占坑注意事项
  5. Python学习笔记1—模块
  6. Windows Socket网络编程-2016.01.07
  7. 用c#写一个json的万能解析器
  8. 最小生成树------Prim算法
  9. (转)Apache2 httpd.conf 配置详解 (二)
  10. Leetcode系列-Search in Rotated Sorted Array
  11. WIA Property Constant Definitions
  12. 面向对象CSS (OOCSS)
  13. swing的第一课
  14. perl 公交车查询
  15. The Apache™ Batik Project
  16. sql中常见日期获取
  17. 关于Content-Type的问题
  18. 2017Wow!新媒体营销深度分享会值得参加吗?
  19. PHP获取Mp3文件信息
  20. Python中从B类中调用A类的方法。

热门文章

  1. SQL SERVER 查找锁信息
  2. 从0开始学习Unity的学习笔记(I 界面学习和简单模型拼装)
  3. linux命令之信息显示与搜索文件命令
  4. NTP服务器配置
  5. 中山纪念中学培训DAY1
  6. robot framework学习笔记之十一--第三方库requests详解
  7. rpm 卸载
  8. Linux 重命名
  9. 关于在JS中AJAX导致跨域问题的解决
  10. HTML01--基础概述