可以用来筛出一个积性函数的前缀和。这个积性函数要满足当\(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添加用户错误:ERROR 1364 (HY000): Field 'ssl_cipher' doesn't have a default value解决方法

    MySQL添加新用户时出现如下报错,如下图: 经过查资料了解到: mysql用户表的中某些字段不能为空,没有默认值,其实是操作错误,mysql添加用户是不能这样直接insert user表的. 改为以 ...

  2. 漫谈数组去重复方法(亮点是ES6的新API)

    方法1: 利用遍历的思想来进行. <!DOCTYPE html><html lang="en"><head> <meta charset= ...

  3. kubectl常用命令汇总

    #查看k8s的所有node节点 kubectl get node #查看ns的pod kubectl get pod --all-namespaces -o wide kubectl get pod ...

  4. 使用postman发送post数据时遇到的问题

    平时工作最多的内容就是写接口,免不了测试自己写的接口是否正确,postman就是一个不错的选择 使用postman最好了解一些http协议的知识,不然就会闹笑话,比如,下面这个图片中的做法,尝试发送p ...

  5. centos/ubuntu 双击运行 .sh(shell)文件

    centos 创建桌面双击启动程序(更改图标) - Feythin Lau - 博客园http://www.cnblogs.com/feiyuliu/archive/2012/11/29/279503 ...

  6. Day 4-2 random模块

    import random random.randint(1,100) # 从1到100中随机取出一个数.包含100 random.randrange(1,100) #功能和上面一样.只是不包含100 ...

  7. 剑指offer(11)

    题目: 输入一个链表,输出该链表中倒数第k个结点. 思路: 我们一先想到的应该是循环两次链表,第一次获得它的长度,然后用长度-k,得出目标节点在链表的第几位,再循环一次. 如果要求只用一次循环的话,我 ...

  8. Java变量类型识别的3种方式

    内容导览 反射方式,成员变量的类型判断 isInstance用法 利用泛型识别类型 测试类: package com.cxyapi.oo; import java.util.Date; import ...

  9. python之路--MySQL权限管理 数据备份还原

    一 权限管理 mysql最高管理者是root用户, 这个一般掌握在公司DBA手里, 当你想去对数据库进行一些操作的时候,需要DBA授权给你. 1. 对新用户增删改 1. 创建用户 # 要先use my ...

  10. JQ remove()方法实现似收货地址逐一删除的效果

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...