可以用来筛出一个积性函数的前缀和。这个积性函数要满足当\(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的更多相关文章

  1. 【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, ...

  2. Min_25 筛 学习笔记

    原文链接https://www.cnblogs.com/zhouzhendong/p/Min-25.html 前置技能 埃氏筛法 整除分块(这里有提到) 本文概要 1. 问题模型 2. Min_25 ...

  3. UOJ188 Sanrd Min_25筛

    传送门 省选之前做数论题会不会有Debuff啊 这道题显然是要求\(1\)到\(x\)中所有数第二大质因子的大小之和,如果不存在第二大质因子就是\(0\) 线性筛似乎可以做,但是\(10^{11}\) ...

  4. 【SPOJ】DIVCNTK min_25筛

    题目大意 给你 \(n,k\),求 \[ S_k(n)=\sum_{i=1}^n\sigma_0(i^k) \] 对 \(2^{64}\) 取模. 题解 一个min_25筛模板题. 令 \(f(n)= ...

  5. 【51NOD1847】奇怪的数学题 min_25筛

    题目描述 记\(sgcd(i,j)\)为\(i,j\)的次大公约数. 给你\(n\),求 \[ \sum_{i=1}^n\sum_{j=1}^n{sgcd(i,j)}^k \] 对\(2^{32}\) ...

  6. 【51NOD1965】奇怪的式子 min_25筛

    题目描述 给你\(n\),求 \[ \prod_{i=1}^n{\sigma_0(i)}^{i+\mu(i)} \] 对\({10}^{12}+39\)取模. \(\sigma_0(i)\)表示约数个 ...

  7. min_25筛

    min_25筛 用来干啥? 考虑一个积性函数\(F(x)\),用来快速计算前缀和\[\sum_{i=1}^nF(i)\] 当然,这个积性函数要满足\(F(x),x\in Prime\)可以用多项式表示 ...

  8. 关于 min_25 筛的入门以及复杂度证明

    min_25 筛是由 min_25 大佬使用后普遍推广的一种新型算法,这个算法能在 \(O({n^{3\over 4}\over log~ n})\) 的复杂度内解决所有的积性函数前缀和求解问题(个人 ...

  9. 51Nod1222 最小公倍数计数 数论 Min_25 筛

    原文链接https://www.cnblogs.com/zhouzhendong/p/51Nod1222.html 题意 给定 $a,b$, 求 $$\sum_{n=a}^b \sum_{i=1}^n ...

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

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

随机推荐

  1. MySQL中关于数据类型指定宽度之后的情况

    概述 MySQL有很多种数据类型,最常用的就是int,char,varchar,这些类型在创建表的时候都可以指定该字段的宽度,方法是在类型后面加一个括号,括号中写宽度就可以了. 但是,在指定宽度之后, ...

  2. 提高工作效率-window热键

    一.虚拟桌面 Ctrl win D          创建另一个桌面 Ctrl win  左右箭头     来回切换桌面 Ctrl win  F4     关闭当前虚拟桌面 二.窗口 win  M  ...

  3. 爬虫——scrapy框架

    Scrapy是一个异步处理框架,是纯Python实现的爬虫框架,其架构清晰,模块之间的耦合程度低,可拓展性强,可以灵活完成各种需求.我们只需要定制几个模块就可以轻松实现一个爬虫. 1.架构  Scra ...

  4. Java Integer 与 int 深刻理解

    今天在做Object 自动转为Integer 类型之后的判断,遇到一个不理解的点,当数值超过127之后,两个数值相同的Object 对象用 == 判断的结果是false. Object a = 128 ...

  5. Linux 查询oracle错误日志&警告日志

    1 通过命令查看错误日志目录:show parameter background_dump_dest /usr/oracle/app/diag/rdbms/orcl/orcl/trace   2 根据 ...

  6. [转帖]再次提醒Google Chrome用户应尽快升级浏览器到72.0.3626.121

    再次提醒Google Chrome用户应尽快升级浏览器到72.0.3626.121 转帖地址: https://www.cnbeta.com/articles/tech/825591.htm 国内离线 ...

  7. longquan

    /** * 登录后将数据填写到主数据 */ public void login(String login_nr) { //File f = new File(android.os.Environmen ...

  8. java学习之—链表(1)

    /** * 单链表操作 * Create by Administrator * 2018/6/14 0014 * 下午 2:05 **/ public class Link { public int ...

  9. C#中as运算符

    as运算符用于执行引用类型的显式类型转换.如果要转换的类型与指定的类型兼容,转换就会成功进行:如果类型不兼容,as运算符就会返回null值.如下面的代码所示,如果object引用实际上不引用strin ...

  10. linux 地址解析协议 arp

    随便转载,保留出处:http://www.cnblogs.com/aaron-agu/ arp –na #查看 arp –s 123.253.68.209 00:19:56:6F:87:D4 #添加