原文链接https://www.cnblogs.com/zhouzhendong/p/Min-25.html

前置技能

  埃氏筛法

  整除分块(这里有提到)

本文概要

  1. 问题模型

  2. Min_25 筛

  3. 模板题以及模板代码

问题模型

  有一个积性函数 $f$ ,对于所有质数 $p$,$f(p)$ 是关于 $p$ 的多项式,$f(p^k)$ 非常容易计算(不一定是关于 p 的多项式)。

  求

$$\sum_{i=1}^{n} f(i)$$

  $n\leq 10^{10}$

  ${\rm Time\ Limit} = 1s$

Min_25 筛

  设集合 $P$ 表示素数集合。

  设

$$g_{n,m} = \sum_{2\leq i\leq n, \forall p\in P\ and\ p\leq m,p\nmid i} f(i)$$

  则假设 $p\in P$。

$$g(n,m) = \sum_{m<p\leq \sqrt n ,p^e\leq n,e\geq 1} f(p^e) \left([e>1] + \sum_{2\leq x \leq \lfloor \frac n {p^e} \rfloor, \forall p'\in P\ and\ p'\leq p ,p'\nmid x}f(x)\right)+\sum_{m<p\leq n} f(p)$$

  设

$$h(n) = \sum_{1\leq p\leq n} f(p)$$

  则

$$g(n,m)=\sum_{m<p\leq \sqrt n ,p^e\leq n,e\geq 1} f(p^e) \left([e>1] + g(\lfloor \frac n {p^e} \rfloor,p)\right)+h(n)-h(m)$$

(以上公式以及下图摘自 集训队论文2018 - 朱震霆 - 一些特殊的数论函数求和问题)

  接下来我们考虑如何求 $h(x)$ 。

  

  时间复杂度积分算一算就可以知道是 $O(\frac {n^{\frac 3 4}}{\log n})$。

  在求 $g(n,m)$ 的直接爆搜就好了,连记忆化都不用!(但这个我不会证明,为什么是对的自己看论文)

  具体代码实现主要参见模板部分。

模板题以及模板代码

51Nod1222 最小公倍数计数

题意

  给定 $a,b$, 求

$$\sum_{n=a}^b \sum_{i=1}^n \sum_{j=1}^i [{\rm lcm } (i,j) = n]$$

$$a,b\leq 10^{11}$$

$${\rm Time \ Limit } = 6s$$

题解

  先差分一下,转化成求前缀和。

  先把原题的统计无序数对转化成统计有序数对,最终 $ans' = (ans+n)/2$ 即可。

  设集合 $P$ 表示素数集合。

  设 $c(n,p)$ 表示最大的使得 $p^{c(n,p)}|n$ 的数。

  若 ${\rm lcm } (i,j) = n$ ,则

$$\forall p \in P, c(n,p)=\max(c(i,p),c(j,p))$$

  所以,$\forall p\in P$ ,$c(i,p)$ 和 $c(j,p)$ 共有 $2c(n,p) +1 $ 种取值方法。

  所以,设

$$n=\prod_i p_i^{k_i} (p_i\in P)$$

  则

$$ \sum_{i=1}^n \sum_{j=1}^i [{\rm lcm } (i,j) = n] = \prod_t (2k_t+1) $$

  显然这个式子满足 Min_25 筛的条件,直接筛就好了。

  关于本题,还有一些其他做法,详见https://www.cnblogs.com/zhouzhendong/p/51Nod1222.html

代码

#pragma GCC optimize("Ofast","inline")
#include <bits/stdc++.h>
#define clr(x) memset(x,0,sizeof (x))
using namespace std;
typedef long long LL;
LL read(){
LL x=0,f=0;
char ch=getchar();
while (!isdigit(ch))
f|=ch=='-',ch=getchar();
while (isdigit(ch))
x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
return f?-x:x;
}
const int Base=1000005,N=Base*2+5;
LL n,cn,a,b,base;
LL h[N],ps[N],cnt;
LL p[N],pcnt;
#define ID(i) ((i)<=base?i:cnt-cn/(i)+1)
LL f(int e){
return e*2+1;
}
LL g(LL n,LL m){
LL ans=max(0LL,h[ID(n)]-h[ID(p[m-1])]);
for (int i=m;i<=pcnt&&p[i]*p[i]<=n;i++){
LL nn=n/p[i];
for (int e=1;nn>0;e++,nn/=p[i])
ans+=f(e)*((e>1)+g(nn,i+1));
}
return ans;
}
LL _solve(LL _n){
cn=n=_n,base=(LL)sqrt(n),cnt=pcnt=0;
for (LL i=1;i<=n;i=ps[cnt]+1)
ps[++cnt]=n/(n/i),h[cnt]=ps[cnt]-1;
p[0]=1;
for (LL i=2;i<=base;i++)
if (h[i]!=h[i-1]){
p[++pcnt]=i;//顺便把质数筛出来
LL i2=i*i;
for (LL j=cnt;ps[j]>=i2;j--)
h[j]-=h[ID(ps[j]/i)]-(pcnt-1);
}
for (LL i=1;i<=cnt;i++)
h[i]*=3;
return g(n,1)+1;
}
LL solve(LL n){
return (_solve(n)+n)/2;
}
int main(){
a=read(),b=read();
cout<<solve(b)-solve(a-1)<<endl;
return 0;
}

  

  

Min_25 筛 学习笔记的更多相关文章

  1. Min_25筛 学习笔记

    这儿只是一个简单说明/概括/总结. 原理见这: https://www.cnblogs.com/cjyyb/p/9185093.html https://www.cnblogs.com/zhoushu ...

  2. min_25筛学习笔记【待填坑】

    看见ntf和pb两位大佬都来学了,然后就不自觉的来学了. 我们考虑这样一个问题. $$ans=\sum_{i=1}^nf(i)$$其中$1\leq n\leq 10^{10}$ 其中$f(i)$是一个 ...

  3. 洲阁筛 & min_25筛学习笔记

    洲阁筛 给定一个积性函数$F(n)$,求$\sum_{i = 1}^{n}F(n)$.并且$F(n)$满足在素数和素数次幂的时候易于计算. 显然有: $\sum_{i = 1}^{n} F(n) = ...

  4. Min_25筛学习笔记

    感觉好好用啊 Luogu上的杜教筛模版题一发 Min_25抢到了 rank1 $ Updated \ on 11.29 $被 STO txc ORZ踩爆啦 前言 $ Min$_$25$筛可以求积性函数 ...

  5. $Min\_25$筛学习笔记

    \(Min\_25\)筛学习笔记 这种神仙东西不写点东西一下就忘了QAQ 资料和代码出处 资料2 资料3 打死我也不承认参考了yyb的 \(Min\_25\)筛可以干嘛?下文中未特殊说明\(P\)均指 ...

  6. Powerful Number 筛学习笔记

    Powerful Number 筛学习笔记 用途 \(Powerful\ number\) 筛可以用来求出一类积性函数的前缀和,最快可以达到根号复杂度. 实现 \(Powerful\ number\) ...

  7. Min_25筛 学习小记

    前言 为什么叫学习小记呢?因为暂时除了模板题就没有做其他的东西了.(雾 这个东西折磨了我一整天,看得我身不如死,只好结合代码理解题解,差点死在机房.(话说半天综合半天竞赛真是害人不浅) 为了以后忘了再 ...

  8. min-25筛学习笔记

    Min_25筛简介 \(\text{min_25}\)筛是一种处理一类积性函数前缀和的算法. 其中这类函数\(f(x)\)要满足\(\sum_{i=1}^{n}[i\in prime]\cdot f( ...

  9. min_25 筛学习小记

    min_25筛 由 dalao min_25 发明的筛子,据说时间复杂度是极其优秀的 \(O(\frac {n^{\frac 3 4}} {\log n})\),常数还小. 1. 质数 \(k\) 次 ...

随机推荐

  1. django上传图片简单验证以及自动修改图片名称

    django实现文件(图片)上传之后自动修改名称以及页面上传图片时的各种提醒: 1.先在你项目中添加一个文件夹如:system 在文件夹下添加__init__.py 和storage.py文件,并在s ...

  2. js javascript 简易随机值穿插加解密【原】

    适用场景 本方法适用于需要对敏感信息进行加密传输,但加解密要求又不高的场景,因为是前台的javascript加解密,所以其实还是能通过js代码分析出原始值来的. 如果您对信息极其敏感, 比例登录密码这 ...

  3. OpenCV初步

    目录 一 写在开头 1.1 本文内容 二 涉及的API 三 OpenCV 3.4.2在Ubuntu 16.04 LTS下的编译安装 四 OpenCV安装测试与图像的加载和显示 4.1 安装测试 4.2 ...

  4. 查找修补文件差异diff、patch

    diff patch -p1 diff -Naur directory1 directory2

  5. python中opencv的安装

    1.得到opencv的安装包: 2.把安装包中的cv.py, cv2.pd放到一个文件夹中,并把这个文件夹放到D:\Anaconda2\Lib\site-packages中: 3.添加新的变量,变量名 ...

  6. NIPS2017-The neural hawks process

    NIPS2017哪些论文值得关注 论文链接 1.首先这篇文章研究的是 event stream,什么是event stream呢 ? 假如你是一个医生,你每天会看到很多病人 ,对于每一个病人,你都有他 ...

  7. Microsoft Internet Explorer v11 / XML External EntityInjection 0day

    [+] Credits: John Page (aka hyp3rlinx) [+] Website: hyp3rlinx.altervista.org[+] Source:  http://hyp3 ...

  8. 2018-2019-2 网络对抗技术 20165237 Exp3 免杀原理与实践

    2018-2019-2 网络对抗技术 20165237 Exp3 免杀原理与实践 一.实践目标 1.1 正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,加壳 ...

  9. OnePlus5刷机后一直检查更新

    大概是由于爱折腾,上一个手机是Nexus5,现在又是Oneplus5,闲来无事就爱刷机. 昨天看OnePlus官网的氧OS更新到Android9.0,于是又开启了刷机旅程. 显然这次没有之前那么顺利, ...

  10. 洛谷P4770 [NOI2018]你的名字 [后缀自动机,线段树合并]

    传送门 思路 按照套路,直接上后缀自动机. 部分分:\(l=1,r=|S|\) 首先把\(S\)和\(T\)的后缀自动机都建出来. 考虑枚举\(T\)中的右端点\(r\),查询以\(r\)结尾的串最长 ...