Min_25
可以用来筛出一个积性函数的前缀和。这个积性函数要满足当\(x\)是质数时,\(f(x)\)可以快速求出,\(f(x^k)\)也可以快速算出。
首先我们要处理出一个\(g(x)=\sum_{x\in prime}f(x)\),处理这个的主要思想和埃氏筛法差不多。我们只要\(x\)是质数时候的值,那么,我先假设所有的数是质数,然后一步步筛掉不是质数的\(x\)的函数值。
具体地,先把\(\sqrt{ n }\) 以内的质数筛出来,我们设\(g(n,j)\)表示已经筛掉了\(n\)以内的,含有小于等于\(p_j\)的质因子的和数的答案。考虑从\(g(n,j-1)\)转移到\(g(n,j)\),也就是我们要把那些最小质因子是\(p_j\)的数的函数值从中剪掉。
如果\(p_j^2>n\), 那么就没有这样的数,所以\(g(n,j)=g(n,j-1)\)。所以\(p_j\)只要到枚举到\(\sqrt{n}\),\(g(\sqrt{n},|P|)\),就是最后的前缀和。
要不然就要减掉一些。因为这是积性函数,我们直接把质因子\(p_j\)提出来,乘上剩下的部分,也就是\(f(p_j)*[g(\frac{n}{p_j},j-1)-g(p_j-1,j-1)]\),后面减去的部分就是那些最小质因子比\(p_j\)小的。显然\(g(p_j-1,j-1)=\sum_{x\in prime}{f(x)}\),我们在筛质数的时候预处理一下。所以\(g(n,j)=g(n,j-1)-f(p_j)*[g(\frac{n}{p_j},j-1)-\sum_{x\in prime}f(x)]\)。
至于怎样实现,可以看看这个筛质数前缀和的代码。
#define id(x) ( (x)<=max_d?id1[x]:id2[d/(x)] )
__int128 cal(ll d)
{
cnt=0;
ll last;
__int128 now;
for(ll i=1;i<=d;i=last+1)
{
now=d/i;last=d/now;
num[++cnt]=now;
f[cnt]=now*(now+1)/2-1;
if(now<=max_d)id1[now]=cnt;
else id2[d/now]=cnt;
}
For(j,1,p[0])
{
__int128 m=(__int128)p[j]*p[j];
if(m>d)break;
for(int i=1;i<=cnt&&num[i]>=m;i++)
{
int t=id(num[i]/p[j]);
f[i]-=(__int128)p[j]*(f[t]-sum[p[j]-1]);
}
}
return f[id(d)];
}
有一个很神奇的结论,就是\(\lfloor \frac {n}{p_i*p_J}\rfloor=\lfloor \frac{\lfloor \frac{n}{p_i}\rfloor}{p_j}\rfloor\),所以我们只要把\(n\)的整除分块的那\(2\sqrt{n}\)个值全部处理出来就行了。
接下来,我们来计算一个积性函数的前缀和。设\(S(n,j)\)表示\(1\)到\(n\)的前缀和,并且含有\(>=p_j\)的质因子的和。
那么有\(S(n,j)=g(n,|P|)-\sum_{i=1}^{j-1} f(p_i)+\sum_{k>=j}\sum_{e}^{p_k^e<=n}(F(p_k^e)*S(\frac{n}{p_k^e},j+1)+F(p_k^{e+1}))\)。就是枚举最小质因子以及它的幂次,然后以后只能用\(>p_k\)的质因子。加上\(F(p_k^{e+1})\)是因为这一项枚举不到就要单独加上。
Min_25的更多相关文章
- 【UOJ448】【集训队作业2018】人类的本质 min_25筛
题目大意 给你 \(n,m\),求 \[ \sum_{i=1}^n\sum_{x_1,x_2,\ldots,x_m=1}^i\operatorname{lcm}(\gcd(i,x_1),\gcd(i, ...
- Min_25 筛 学习笔记
原文链接https://www.cnblogs.com/zhouzhendong/p/Min-25.html 前置技能 埃氏筛法 整除分块(这里有提到) 本文概要 1. 问题模型 2. Min_25 ...
- UOJ188 Sanrd Min_25筛
传送门 省选之前做数论题会不会有Debuff啊 这道题显然是要求\(1\)到\(x\)中所有数第二大质因子的大小之和,如果不存在第二大质因子就是\(0\) 线性筛似乎可以做,但是\(10^{11}\) ...
- 【SPOJ】DIVCNTK min_25筛
题目大意 给你 \(n,k\),求 \[ S_k(n)=\sum_{i=1}^n\sigma_0(i^k) \] 对 \(2^{64}\) 取模. 题解 一个min_25筛模板题. 令 \(f(n)= ...
- 【51NOD1847】奇怪的数学题 min_25筛
题目描述 记\(sgcd(i,j)\)为\(i,j\)的次大公约数. 给你\(n\),求 \[ \sum_{i=1}^n\sum_{j=1}^n{sgcd(i,j)}^k \] 对\(2^{32}\) ...
- 【51NOD1965】奇怪的式子 min_25筛
题目描述 给你\(n\),求 \[ \prod_{i=1}^n{\sigma_0(i)}^{i+\mu(i)} \] 对\({10}^{12}+39\)取模. \(\sigma_0(i)\)表示约数个 ...
- min_25筛
min_25筛 用来干啥? 考虑一个积性函数\(F(x)\),用来快速计算前缀和\[\sum_{i=1}^nF(i)\] 当然,这个积性函数要满足\(F(x),x\in Prime\)可以用多项式表示 ...
- 关于 min_25 筛的入门以及复杂度证明
min_25 筛是由 min_25 大佬使用后普遍推广的一种新型算法,这个算法能在 \(O({n^{3\over 4}\over log~ n})\) 的复杂度内解决所有的积性函数前缀和求解问题(个人 ...
- 51Nod1222 最小公倍数计数 数论 Min_25 筛
原文链接https://www.cnblogs.com/zhouzhendong/p/51Nod1222.html 题意 给定 $a,b$, 求 $$\sum_{n=a}^b \sum_{i=1}^n ...
- 洲阁筛 & min_25筛学习笔记
洲阁筛 给定一个积性函数$F(n)$,求$\sum_{i = 1}^{n}F(n)$.并且$F(n)$满足在素数和素数次幂的时候易于计算. 显然有: $\sum_{i = 1}^{n} F(n) = ...
随机推荐
- kattis Programming Tutors 给游客与导游匹配(二分+二分图)
题目来源:https://vjudge.net/problem/Kattis-programmingtutors 题意: 有n个游客,n个导游,给出他们的坐标,问你怎么匹配可以使他们最大距离最小 题解 ...
- InvalidDataAccessResourceUsageException:mysql保留字引发的血案
org.springframework.dao.InvalidDataAccessResourceUsageException: could NOT EXECUTE statement; SQL [n ...
- Thrift序列化与反序列化
Thrift序列化与反序列化的实现机制分析 Thrift是如何实现序死化与反序列化的,在IDL文件中,更改IDL文件中的变量序号或者[使用默认序号的情况下,新增变量时,将新增的变量不放在IDL文件的结 ...
- Python_生产者消费者模型、管道、数据共享、进程池
1.生产者消费者模型 生产者 —— 生产数据的人 消费者 —— 消费数据的人 生产者消费者模型:供销数据不平衡的现象. import time import random from multiproc ...
- Ubuntu端口开放
一.关于iptable的介绍 维基百科:https://zh.wikipedia.org/wiki/Iptables 注意:iptables的操作需要root权限 二.具体操作 sudo apt-ge ...
- 文件传输协议FTP、SFTP和SCP
网络通信协议分层 应用层: HTTP(Hypertext Transfer Protocol 超文本传输协议,显示网页) DNS(Domain Name System) FTP(File Transf ...
- [官网]How to use distributed transactions with SQL Server on Docker
How to use distributed transactions with SQL Server on Docker https://docs.microsoft.com/en-us/sql/l ...
- C# Note30: 软件加密机制以及如何防止反编译
参考文章: C#软件license管理(简单软件注册机制) 软件加密技术和注册机制 .NET中的许可证机制--License 背景 .net是一种建立在虚拟机上执行的语言,它直接生成 MSIL 的中间 ...
- checkbox操作判断 Jquery选择器
function checkAll(d){ console.log(d); console.log(d.checked); //注意 这里是d不是$(d) 不是jQuery对象 if(d.checke ...
- select、poll、epoll之间的区别(搜狗面试)
(1)select==>时间复杂度O(n) 它仅仅知道了,有I/O事件发生了,却并不知道是哪那几个流(可能有一个,多个,甚至全部),我们只能无差别轮询所有流,找出能读出数据,或者写入数据的流,对 ...