题意:f(i)=i的幂次之和。 求(N+1-i)*f(i)之和。

思路:可以推论得对于一个素数p^k,其贡献是ans=(N+1)[N/(P^k)]+P^k(1+2+3...N/(P^k));

我们分两部分统计答案即可,在p<=sqrt(N)时,可以暴力(阶乘那样一直除)统计答案。 p>sqrt(N)时,我们可以利用min25的消息得到。

因为p>sqrt(N),这个时候k=1,所以贡献为(N+1)*(N/p)+p*(1+2+...N/p);我们把N/p相同的拉出来即可,而这个东西正好就是min25的基本操作。

N/p有根号级别个,我们把素数个数前缀和保存到h[]里,素数和的前缀和保存到g[]里,就不难得到区间素数个数,以及区间素数和。

wa点:写出来容易爆炸long long。

前缀和公式:x*(x+1)/2;由于x*(x+1)可能爆炸ll,所以我们得到x=x%Mod再进行计算,这个时候就不能/2了,需要*2的逆元。

ans:ans没必要每次维护到[0,Mod)这个范围内,我们最后一次性处理就好了,毕竟每次加减的都是[0,Mod)这个范围的数,最后结果一定再long long范围内。这样会

快一些。

#include<bits/stdc++.h>
#define ll long long
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int maxn=;
const int Mod=,inv2=(Mod+)/;
int qpow(int a,int x){
int res=; while(x){
if(x&) res=1LL*res*a%Mod; x>>=;
a=1LL*a*a%Mod;
} return res;
}
struct min25 //很多部分需要long,不要搞错了
{
ll p[maxn],sp1[maxn],N;
ll g1[maxn],h[maxn];int Sqr,ind1[maxn],ind2[maxn],num,tot;
ll w[maxn]; bool vis[maxn];
int MOD(int x){ if(x>=Mod) x-=Mod;return x; }
void prime() //得到素数,sp1,sp2
{
rep(i,,Sqr){
if(!vis[i]){
p[++num]=i;
sp1[num]=MOD(sp1[num-]+i);
}
for(int j=;j<=num&&p[j]*i<=Sqr;j++){
vis[p[j]*i]=;
if(i%p[j]==) break;
}
}
}
void getind()
{
for(ll i=;i<=N;i++){
ll now=N/i,j=N/now,t=now%Mod;
w[++tot]=now;
g1[tot]=MOD(t*(t+)/%Mod+Mod-); //因为我们全部都不考虑1。
h[tot]=t-;
if(g1[tot]<) g1[tot]+=Mod;
if(h[tot]<) h[tot]+=Mod;
if(now<=Sqr) ind1[now]=tot;
else ind2[j]=tot;
i=j;
}
}
void getg()
{
rep(i,,num){ //注意w里面的东西是递减的,所以可以滚动
for(int j=;j<=tot&&p[i]<=w[j]/p[i];j++){
ll now=w[j]/p[i];
int k=now<=Sqr?ind1[now]:ind2[N/now];
g1[j]=MOD(g1[j]-1LL*p[i]*(g1[k]-sp1[i-]+Mod)%Mod+Mod);
h[j]=(h[j]-(h[k]-i++Mod)%Mod+Mod)%Mod;
}
}
}
ll get(ll x) { return x*(x+)%Mod*inv2%Mod; }//x需要实现%Mod,不然爆ll,所以也不能用/2,而用逆元。
void solve(ll n)
{
N=n; Sqr=sqrt(N);
prime(); //筛根号部分素数。
ll ans=;
rep(i,,num){
for(ll e=p[i];e<=N;e*=p[i]){
ans+=(N+)%Mod*(N/e)%Mod-e%Mod*get(N/e%Mod)%Mod;
}
}
getind();
getg();
rep(i,,Sqr-){
ans+=(N+)%Mod*i*((h[i]-h[i+]+Mod)%Mod)%Mod; //多少个素数满足N/p=i
ans-=1LL*get(i)*((g1[i]-g1[i+]+Mod)%Mod)%Mod; //素数之和
}
ans%=Mod; if(ans<) ans+=Mod;
printf("%lld\n",ans%Mod);
}
}T;
int main()
{
ll N;
scanf("%lld",&N);
T.solve(N);
return ;
}

,很多地方容易爆long long。

2019徐州网络赛H :function (min25筛)的更多相关文章

  1. 2019徐州网络赛 H.function

    题意: 先有\(n=p_1^{k_1}p_2^{k_2}\cdots p_m^{k_m}\),定义\(f(n)=k_1+k_2+\cdots+k_m\). 现在计算 \[ \sum_{i=1}^nf( ...

  2. ICPC 2019 徐州网络赛

    ICPC 2019 徐州网络赛 比赛时间:2019.9.7 比赛链接:The Preliminary Contest for ICPC Asia Xuzhou 2019 赛后的经验总结 // 比赛完才 ...

  3. 2018徐州网络赛H. Ryuji doesn't want to study

    题目链接: https://nanti.jisuanke.com/t/31458 题解: 建立两个树状数组,第一个是,a[1]*n+a[2]*(n-1)....+a[n]*1;第二个是正常的a[1], ...

  4. 2019徐州网络赛 I J M

    I. query 比赛时候没有预处理因子疯狂t,其实预处理出来因子是\(O(nlog(n))\)级别的 每个数和他的因子是一对偏序关系,因此询问转化为(l,r)区间每个数的因子在区间(l,r)的个数 ...

  5. 2019南昌网络赛H The Nth Item(打表找询问循环节 or 分段打表)

    https://nanti.jisuanke.com/t/41355 思路 从fib循环节入手,\(O(1e7log(1e9))\),tle 因为只需要输出所有询问亦或后的结果,所以考虑答案的循环节, ...

  6. 【树状数组】2019徐州网络赛 query

    (2)首先成倍数对的数量是nlogn级别的,考虑每一对[xL,xR](下标的位置,xL < xR)会对那些询问做出贡献,如果qL <= xL && qR >= xR, ...

  7. query 2019徐州网络赛(树状数组)

    query \[ Time Limit: 2000 ms \quad Memory Limit: 262144 kB \] 题意 补题才发现比赛的时候读了一个假题意.... 给出长度为 \(n\) 的 ...

  8. [2019徐州网络赛J题]Random Access Iterator

    题目链接 大致题意:从根节点出发,在节点x有son[x]次等概率进入儿子节点,求到达最深深度的概率.son[x]为x节点的儿子节点个数. 又又又又没做出来,心态崩了. 下来看了官方题解后发觉自己大体思 ...

  9. 2019徐州网络赛 I.query

    这题挺有意思哈!!!看别人写的博客,感觉瞬间就懂了. 这道题大概题意就是,给一串序列,我们要查找到l-r区间内,满足min(a[ i ],a[ j ]) = gcd(a[ i ],a[ j ]) 其实 ...

随机推荐

  1. 在 QML 中使用 C++ 类和对象

    Qt Quick 技术的引入,使得你能够快速构建 UI ,具有动画.各种绚丽效果的 UI 都不在话下.但它不是万能的,也有很多局限性,原来 Qt 的一些技术,比如低阶的网络编程如 QTcpSocket ...

  2. Linux命令随手记

    随手记录常用的Linux命令. tar 解压.   tar   -xzvf tar 压缩:tar   -czvf   .tgz (z是压缩格式,x为解压,v为显示过程,f指定备份文件) tar -zc ...

  3. sentry之二:sentry配置钉钉和email

    springboot+springcloud后台项目配置日志采集 gradle: compile 'com.getsentry.raven:raven-logback:8.0.2' compile ' ...

  4. 并查集 + 路径压缩(经典) UVALive 3027 Corporative Network

    Corporative Network Problem's Link Mean: 有n个结点,一开始所有结点都是相互独立的,有两种操作: I u v:把v设为u的父节点,edge(u,v)的距离为ab ...

  5. VMWare 下安装 Windows XP

    准备工作 安装VMware 我这里安装的是 VMware-workstation-full-12.1.1-3770994.exe 下载Windows XP with SP3 从网上下载的MSDN版本X ...

  6. 1-RocketMq 学习 中文文档(一)

    原文:https://blog.csdn.net/weixin_40533111/article/details/84451096 1.基本概念及优势 rocketmq是一个基于发布订阅队列模型的消息 ...

  7. Struts2处理(jQuery)Ajax请求

    1. Ajax     Ajax(Asynchronous JavaScript and XML,异步JavaScript和XML)时一种创建交互式网页应用的网页开发技术,它并不是一项新的技术,其产生 ...

  8. Flask中request与response参数

    目录 request response request from flask import Flask from flask import request app = Flask(__name__) ...

  9. webuploader-异步切片上传(暂不支持断点续传)及 下载方法!C#/.NET

    十年河东,十年河西,莫欺少年穷 学无止境,精益求精 进入正题: 关于webuploader,参考网址:https://fex.baidu.com/webuploader/: 本篇博客范例下载地址:ht ...

  10. C# 【Http请求返回】性能优化500毫秒到 60 毫秒

    偶然发现 C# 的 HttpRequest 要比 Chrome 请求同一Url 慢好多.C# HttpRequest 要500毫秒 而Chrome 只需要 39ms. 作为有责任感的 码农.这个 必须 ...