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