分析

因为题目中所给函数\(f(x)\)的前缀和无法较快得出,考虑打表以下两个函数:

\[g(x)=x \times [x是质数]
\]

\[h(x)=1 \times [x是质数]
\]

这两个函数的前缀和都可以通过Min_25筛第一阶段的处理得出,时间复杂度为\(O(\frac{n^{\frac{3}{4}}}{\log n})\)。

我们发现:

\[f(2)=g(2)+h(2)
\]

\[f(x)=g(x)-h(x),x是质数 且 x \neq 2
\]

然后就可以把这两个函数一起做Min_25筛的第二阶段,\(y=1\)的时候特判一下加个\(2\)就好了,时间复杂度为\(O(\frac{n^{\frac{3}{4}}}{\log n})\)。(太鶸了并不会证时间复杂度)

(还是写哈希表更直观,虽然也更慢)

代码

#include <bits/stdc++.h>
#define rin(i,a,b) for(register int i=(a);i<=(b);++i)
#define irin(i,a,b) for(register int i=(a);i>=(b);--i)
#define trav(i,a) for(register int i=head[a];i;i=e[i].nxt)
typedef long long LL;
using std::cin;
using std::cout;
using std::endl; inline LL read(){
LL x=0,f=1;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();}
return x*f;
} const LL MAXN=1e10+5;
const int MOD=1e9+7;
const int INV2=5e8+4;
const int HASH=3e6-1;
const int MAXR=2e5+5;
LL n,num[MAXR];
int prm[MAXR],sum[MAXR],cnt;
int g0[MAXR],g1[MAXR],tot;
int id1[MAXR],id2[MAXR];
bool vis[MAXR]; void pre_process(int n){
rin(i,2,n){
if(!vis[i]) prm[++cnt]=i,sum[cnt]=(sum[cnt-1]+prm[cnt])%MOD;
rin(j,1,cnt){
if(i*prm[j]>n) break;
vis[i*prm[j]]=true;
if(i%prm[j]==0) break;
}
}
} inline int getid(LL x){
if(x<=MAXR-5) return id1[x];
else return id2[n/x];
} inline int min_25(LL x,int y){
if(x<2||x<prm[y]) return 0;
int xx=getid(x),ret=(((g1[xx]-sum[y-1])-(g0[xx]-(y-1)))%MOD+MOD)%MOD;
if(y==1) ret=(ret+2)%MOD;
rin(i,y,cnt){
if(1ll*prm[i]*prm[i]>x) break;
register LL now=prm[i];
for(register int j=1;now*prm[i]<=x;++j,now*=prm[i])
ret=(ret+1ll*(prm[i]^j)*min_25(x/now,i+1)+(prm[i]^(j+1)))%MOD;
}
return ret;
} int main(){
n=read();pre_process((int)(sqrt(n)+0.5));
for(register LL i=1,nxti=0;i<=n;i=nxti+1){
num[++tot]=n/i,nxti=n/num[tot];
if(num[tot]<=MAXR-5) id1[num[tot]]=tot;
else id2[n/num[tot]]=tot;
g0[tot]=(num[tot]-1)%MOD;
g1[tot]=(2+num[tot])%MOD*((num[tot]-1)%MOD)%MOD*INV2%MOD;
}
rin(i,1,cnt){
rin(j,1,tot){// num[j] from big to small.
if(1ll*prm[i]*prm[i]>num[j]) break;
int k=getid(num[j]/prm[i]);
g0[j]=(g0[j]-(g0[k]-(i-1))+MOD)%MOD;
g1[j]=((g1[j]-1ll*prm[i]*(g1[k]-sum[i-1]))%MOD+MOD)%MOD;
}
}
printf("%d\n",min_25(n,1)+1);
return 0;
}

[LOJ6053]简单的函数:Min_25筛的更多相关文章

  1. LOJ.6053.简单的函数(Min_25筛)

    题目链接 Min_25筛见这里: https://www.cnblogs.com/cjyyb/p/9185093.html https://www.cnblogs.com/zhoushuyu/p/91 ...

  2. LOJ 6053 简单的函数——min_25筛

    题目:https://loj.ac/problem/6053 min_25筛:https://www.cnblogs.com/cjyyb/p/9185093.html 这里把计算 s( n , j ) ...

  3. 简单的函数——Min_25筛

    %%yyb %%zsy 就是实现一下Min-25筛 筛积性函数的操作 首先要得到 $G(M,j)=\sum_{t=j}^{cnt} \sum_{e=1}^{p_t^{e+1}<=M} [\phi ...

  4. loj 6053 简单的函数 —— min_25筛

    题目:https://loj.ac/problem/6053 参考博客:http://www.cnblogs.com/zhoushuyu/p/9187319.html 算 id 也可以不存下来,因为 ...

  5. LOJ6053 简单的函数 【Min_25筛】【埃拉托斯特尼筛】

    先定义几个符号: []:若方括号内为一个值,则向下取整,否则为布尔判断 集合P:素数集合. 题目分析: 题目是一个积性函数.做法之一是洲阁筛,也可以采用Min_25筛. 对于一个可以进行Min_25筛 ...

  6. LOJ6053 简单的函数(min_25筛)

    题目链接:LOJ 题目大意:从前有个积性函数 $f$ 满足 $f(1)=1,f(p^k)=p\oplus k$.(异或)求其前 $n$ 项的和对 $10^9+7$ 取模的值. $1\le n\le 1 ...

  7. LOJ6053 简单的函数

    题目传送门 分析: 对于这道题来说,当\(x\)为质数时: \(~~~~f(x)=x-1+2[x=2]\) 因为除2以外的质数都是奇数,它们与1异或就是减一,然后2就是加一 然后我们先来康康怎么快速求 ...

  8. Min_25 筛

    Min_25 筛 yyb好神仙啊 干什么用的 可以在\(O(\frac{n^{\frac 34}}{\log n})\)的时间内求积性函数\(f(x)\)的前缀和. 别问我为什么是这个复杂度 要求\( ...

  9. [算法]Min_25筛

    前言 本篇文章中使用的字母\(p\),指\(\text{任意的} p \in \text{素数集合}\) 应用场景 若函数\(f(x)\)满足, \(f(x)\)是积性函数 \(f(p)\)可以使用多 ...

随机推荐

  1. 怎样理解 display:none 和 visibility:hidden

    1. display: none会使元素节点 "消失" , 就像 死亡后灰飞烟灭了. 它是不占位置的. 2. visibility: hidden会使元素节点 "隐藏&q ...

  2. Java装饰者模式(思维导图)

    图1 装饰者模式[点击查看图片] 1,一个简单的以人为主体的装饰者模式 被装饰者 public interface Human {//被装饰者 public void wearClothes(); p ...

  3. thinkphp 4.8 漏洞测试

    首先要部署环境 这里利用docker的方便部署性,来直接找个现成的    git clone https://github.com/vulnspy/thinkphp-5.1.29.git 下载安装后, ...

  4. 关于SpringMVC的几件小事

    一.SpringMVC表单标签He处理静态资源 1.Spring的表单标签 通过SpringMVC的表单标签可以实现将模型数据中的属性和HTML表单元素相绑定,以实现表单数据更便捷编辑和表单值的回显. ...

  5. JavaScript笔记(5)

    1.DOM操作 常用的DOM操作 document.getElementById(id); //返回指定id的元素,通用 document.getElementsByTagName(tagName); ...

  6. npm install 报错踩坑路

    先出现的是超过最大调用栈问题: npm ERR! Maximum call stack size exceeded 百度之后说给npm降级或者升级 降级 : npm install -g npm@5. ...

  7. tomcat 部署 React 项目后,浏览器刷新报404问题

    问题:tomcat部署了react前端项目,可以正常访问,但是页面刷新就报404 一.问题截图 二.解决办法 在tomcat 配置文件web.xml中配置如下代码: web.xml 路径: apach ...

  8. Java虚拟机内存基础、垃圾收集算法及JVM优化

    1 JVM 简单结构图   1.1 类加载子系统与方法区 类加载子系统负责从文件系统或者网络中加载 Class 信息,加载的类信息存放于一块称 为方法区的内存空间.除了类的信息外,方法区中可能还会存放 ...

  9. 利用python3 爬取 网易云 上 周杰伦所有专辑,歌曲,评论,并完成可视化分析已经歌曲情绪化分析

    这篇文章适合于python爱好者,里面可能很多语句是冗长的,甚至可能有一些尚未发现的BUG,这个伴随着我们继续学习来慢慢消解吧.接下来 我把里面会用到的东西在这里做一个简单总结吧:本文用到了两门解释性 ...

  10. 【Day3】4.Xpath语法与案例

    课程目标 1.谷歌浏览器配置Xpath 2.Xpath常用语法 3.Xpath常用案例 1.谷歌浏览器配置Xpath Xpath下载:http://chromecj.com/web-developme ...