Solution -「洛谷 P5325」Min_25 筛
\(\mathcal{Description}\)
Link.
对于积性函数 \(f(x)\),有 \(f(p^k)=p^k(p^k-1)~(p\in\mathbb P,k\in\mathbb N_+)\)。求 \(\sum_{i=1}^nf(i)\bmod(10^9+7)\)。
\(n\le10^{10}\)。
\(\mathcal{Solution}\)
Min_25 筛是不可能的。
Powerful Number 三步走咯!考虑素数点值:
\]
那么令 \(g=\operatorname{id}\cdot\varphi\)(点乘号即数值相乘),就有 \(g(p)=p^2-p\)。积性函数的点乘亦为积性函数。
求 \(g\) 的前缀和,杜教筛基础操作,卷上一个 \(\operatorname{id}\):
\lbrack(\operatorname{id}\cdot\varphi)\star\operatorname{id}\rbrack(n)&=\sum_{i\mid n}(\operatorname{id}\cdot\varphi)(i)\cdot\frac{n}{i}\\
&=\sum_{i\mid n}n\varphi(i)\\
&=n^2
\end{aligned}
\]
自然数平方和易求,丢到杜教筛的式子里,推导后得出
\]
其中 \(S(n)\) 即为 \(\sum_{i=1}^ng(i)\)。
求 \(h(p^k)\),可以用 Bell 级数推导。令 \(F_p,G_p,H_p\) 分别为 \(f,g,h\) 在某一素数 \(p\) 的 Bell 级数,则
F_p=\operatorname{OGF}\langle1,p(p-1),p^2(p^2-1),\cdots\rangle=\frac{1}{1-p^2z}-\frac{1}{1-pz}+1\\
G_p=\operatorname{OGF}\langle1,p(p-1),p^3(p-1),\cdots\rangle=\frac{1-pz}{1-p^2z}
\end{cases}
\]
应用“两函数 Bell 级数的乘法卷积”为“原函数 Dirichlet 卷积之 Bell 级数”的性质,得到
H_p&=\frac{F_p}{G_p}\\
&=\frac{\frac{1}{1-p^2z}-\frac{1}{1-pz}+1}{\frac{1-pz}{1-p^2z}}\\
&=\frac{1-\frac{1-p^2z}{1-pz}+1-p^2z}{1-pz}\\
&=\frac{1}{1-pz}-\frac{1-p^2z}{(1-pz)^2}+\frac{1-p^2z}{1-pz}\\
\end{aligned}
\]
我们仅仅想求 \(h(p^k)\),即 \([z^k]H_p\),那么
\lbrack z^k\rbrack H_p&=[z^k]\frac{1}{1-pz}-[z^k]\frac{1-p^2z}{(1-pz)^2}-[z^k]\frac{1-p^2z}{1-pz}\\
&=p^k-[(k+1)p^k-kp^{k+1}]+(p^k-p^{k+1})\\
&=(k-1)(p^{k+1}-p^k)
\end{aligned}
\]
最终,\(\mathcal O(n^{\frac{2}{3}})\) 就能求出答案啦。
\(\mathcal{Code}\)
/* Clearink */
#include <cstdio>
#include <unordered_map>
#define rep( i, l, r ) for ( int i = l, repEnd##i = r; i <= repEnd##i; ++i )
#define per( i, r, l ) for ( int i = r, repEnd##i = l; i >= repEnd##i; --i )
typedef long long LL;
const int MOD = 1e9 + 7, MAXSN = 1e7, INV2 = 500000004, INV6 = 166666668;
int pn, pr[MAXSN + 5], gs[MAXSN + 5], phi[MAXSN + 5];
bool npr[MAXSN + 5];
inline int mul( const long long a, const int b ) { return a * b % MOD; }
inline int sub( int a, const int b ) { return ( a -= b ) < 0 ? a + MOD : a; }
inline void subeq( int& a, const int b ) { ( a -= b ) < 0 && ( a += MOD ); }
inline int add( int a, const int b ) { return ( a += b ) < MOD ? a : a - MOD; }
inline void addeq( int& a, const int b ) { ( a += b ) >= MOD && ( a -= MOD ); }
inline void sieve() {
phi[1] = gs[1] = 1;
rep ( i, 2, MAXSN ) {
if ( !npr[i] ) phi[pr[++pn] = i] = i - 1;
for ( int j = 1, t; j <= pn && ( t = i * pr[j] ) <= MAXSN; ++j ) {
npr[t] = true;
if ( !( i % pr[j] ) ) { phi[t] = phi[i] * pr[j]; break; }
phi[t] = phi[i] * ( pr[j] - 1 );
}
gs[i] = add( gs[i - 1], mul( i, phi[i] ) );
}
}
inline int gSum( const LL n ) {
static std::unordered_map<LL, int> mem;
if ( n <= MAXSN ) return gs[n];
if ( mem.count( n ) ) return mem[n];
int ret = mul( n % MOD, mul( mul( ( n + 1 ) % MOD,
( n << 1 | 1 ) % MOD ), INV6 ) );
for ( LL l = 2, r; l <= n; l = r + 1 ) {
r = n / ( n / l );
subeq( ret, mul(
mul( mul( ( l + r ) % MOD, ( r - l + 1 ) % MOD ), INV2 ),
gSum( n / l ) ) );
}
return mem[n] = ret;
}
LL n;
inline int powerSum( const int pid, LL x, const LL v ) {
if ( !v ) return 0;
int ret = 0, p = pr[pid];
if ( pid == 1 || !( x % pr[pid - 1] ) ) ret = mul( v, gSum( n / x ) );
if ( pid > pn ) return ret;
if ( ( x *= p ) > n ) return ret;
if ( ( x *= p ) > n ) return ret;
LL pwr = 1ll * p * p;
if ( pid < pn ) addeq( ret, powerSum( pid + 1, x / pwr, v ) );
for ( int j = 2; x <= n; ++j, x *= p, pwr *= p ) {
addeq( ret, powerSum( pid + 1, x,
mul( v, mul( j - 1, pwr % MOD * ( p - 1 ) % MOD ) ) ) );
}
return ret;
}
int main() {
sieve();
scanf( "%lld", &n );
printf( "%d\n", powerSum( 1, 1, 1 ) );
return 0;
}
Solution -「洛谷 P5325」Min_25 筛的更多相关文章
- Solution -「洛谷 P4372」Out of Sorts P
\(\mathcal{Description}\) OurOJ & 洛谷 P4372(几乎一致) 设计一个排序算法,设现在对 \(\{a_n\}\) 中 \([l,r]\) 内的元素排 ...
- Note/Solution -「洛谷 P5158」「模板」多项式快速插值
\(\mathcal{Description}\) Link. 给定 \(n\) 个点 \((x_i,y_i)\),求一个不超过 \(n-1\) 次的多项式 \(f(x)\),使得 \(f(x ...
- Solution -「洛谷 P4198」楼房重建
\(\mathcal{Description}\) Link. 给定点集 \(\{P_n\}\),\(P_i=(i,h_i)\),\(m\) 次修改,每次修改某个 \(h_i\),在每次修改后 ...
- Solution -「洛谷 P6577」「模板」二分图最大权完美匹配
\(\mathcal{Description}\) Link. 给定二分图 \(G=(V=X\cup Y,E)\),\(|X|=|Y|=n\),边 \((u,v)\in E\) 有权 \(w( ...
- Solution -「洛谷 P6021」洪水
\(\mathcal{Description}\) Link. 给定一棵 \(n\) 个点的带点权树,删除 \(u\) 点的代价是该点点权 \(a_u\).\(m\) 次操作: 修改单点点权. ...
- Solution -「洛谷 P4719」「模板」"动态 DP" & 动态树分治
\(\mathcal{Description}\) Link. 给定一棵 \(n\) 个结点的带权树,\(m\) 次单点点权修改,求出每次修改后的带权最大独立集. \(n,m\le10^5 ...
- Solution -「洛谷 P5236」「模板」静态仙人掌
\(\mathcal{Description}\) Link. 给定一个 \(n\) 个点 \(m\) 条边的仙人掌,\(q\) 组询问两点最短路. \(n,q\le10^4\),\(m\ ...
- Solution -「洛谷 P4320」道路相遇
\(\mathcal{Description}\) Link. 给定一个 \(n\) 个点 \(m\) 条边的连通无向图,并给出 \(q\) 个点对 \((u,v)\),询问 \(u\) 到 ...
- Solution -「洛谷 P5827」边双连通图计数
\(\mathcal{Description}\) link. 求包含 \(n\) 个点的边双连通图的个数. \(n\le10^5\). \(\mathcal{Solution}\) ...
随机推荐
- win 10 遇到某文件一直在占用导致无法关闭,或者去任务管理器找不到服务怎么办?具体解决
1. 打开 cmd 指令框 ,输入 perfmon 回车 就会出来这个 点击 打开资源监视器, 在句柄搜索框搜索 那个占用资源的文件或软件关键词 ,如下 搜索酷狗 将有关的选项,右键选中后 打开菜单 ...
- js几种常见排序的实现
1. 冒泡排序 定义: 比较相邻的前后二个数据,如果前面数据大于后面的数据,就将二个 数据交换. 这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就"沉"到数组第 ...
- 第10组 Alpha冲刺 (6/6)(组长)
1.1基本情况 ·队名:今晚不睡觉 ·组长博客:https://www.cnblogs.com/cpandbb/p/14008187.html ·作业博客:https://edu.cnblogs.co ...
- Word合并多文档
图片如果损坏,点击链接: https://www.toutiao.com/i6489785099528176142/ 很多时候,我们需要将两个或者多个文档的内容,放到一起,而最直接的办法就是将多个文档 ...
- 第51篇-SharedRuntime::generate_native_wrapper()生成编译入口
当某个native方法被调用时,一开始它会从解释入口进入,也就是我之前介绍的.由InterpreterGenerator::generate_native_entry()函数生成的入口例程.在这个例程 ...
- C# - 逆变的具体应用场景
前言 早期在学习泛型的协变与逆变时,网上的文章讲解.例子算是能看懂,但关于逆变的具体应用场景这方面的知识,我并没有深刻的认识. 本文将在具体的场景下,从泛型接口设计的角度出发,逐步探讨逆变的作用,以及 ...
- linux软件安装命令
rpm命令安装 安装 rpm -ivh 包全名(如果当前目录不是软件包所在目录,就需要加绝对路径) -i 安装 -v 显示详细信息 -h 显示进度 升级 rpm -Uvh 包全名 -U 升级 卸载 r ...
- Javascript面向对象——创建对象、构造函数的原型
Javascript面向对象--创建对象.构造函数的原型 其实:JavaScript中的创建类,就是创建一个构造函数,在创建对象时用到new这个关键字, 一.创建对象 1.函数创建对象 functio ...
- SpringCloud之使用Zookeeper作为注册中心
SpringCloud之使用Zookeeper作为注册中心 linux安装zookeeper 安装zookeeper 关闭linux防火墙 启动zookeeper 1 创建项目导入依赖和配置文件 &l ...
- centos7 查看开机启动项
使用 systemctl list-unit-files 查看开机启动项 systemctl is-enabled redis.service 是否开机启动