LOJ 572 「LibreOJ Round #11」Misaka Network 与求和——min_25筛
莫比乌斯反演得 \( ans=\sum\limits_{D=1}^{n}\left\lfloor\frac{n}{D}\right\rfloor^2\sum\limits_{d|D}f(d)^k\mu (\frac{D}{d}) \)
计算 \( S(n)=\sum\limits_{i=1}^{n}f×\mu \)
像杜教筛(https://blog.csdn.net/a1799342217/article/details/80328510)一样写一写式子,因为有 \( \mu \) 所以把补的 g 函数设为 1 函数。
\( \sum\limits_{i=1}^{n}f×\mu×1(i) \)
\( = \sum\limits_{i=1}^{n}\sum\limits_{d|D}1(d)*(f×\mu)(\frac{i}{d}) \)
\( = \sum\limits_{d=1}^{n}1(d)\sum\limits_{i=1}^{\frac{n}{d}}f×\mu (i) \)
\( = \sum\limits_{d=1}^{n}1(d)S(\frac{n}{d}) \)
用这个表示 \( S(n) \),则
\( S(n)=\sum\limits_{d=1}^{n}1(d)S(\frac{n}{d}) - \sum\limits_{d=2}^{n}1(d)S(\frac{n}{d}) \)
\( S(n)=\sum\limits_{i=1}^{n}f×\mu×1(i)- \sum\limits_{d=2}^{n}1(d)S(\frac{n}{d}) \)
\( S(n)=\sum\limits_{i=1}^{n}f(i)- \sum\limits_{d=2}^{n}1(d)S(\frac{n}{d}) \)
用和 UOJ 188 一样的方法求 f 的前缀和即可。
S 的可能角标一定是某个 \( \left\lfloor\frac{n}{i}\right\rfloor \) 。所以 S 可以预处理。预处理的时候别忘了记忆化。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define int unsigned int
#define ll long long
using namespace std;
int pw(int x,int k)
{int ret=;while(k){if(k&)ret*=x;x*=x;k>>=;}return ret;}
const int N=9e4+;
int n,k,base,s[N],g[N],w[N],m,p[N],pk[N],cnt,ans[N];
bool vis[N];ll p2[N];
int Id(int x){return x<=base?m-x+:n/x;}
int S(int n)
{
int k=Id(n);if(ans[k]!=-)return ans[k];
int ret=s[k]+g[k];
for(int i=,j;i<=n;i=n/j+)
{j=n/i;ret-=(n/j-i+)*S(j);}
return ans[k]=ret;
}
void init(int n)
{
base=sqrt(n);
for(int i=;i<=base;i++)
{
if(!vis[i])p[++cnt]=i,p2[cnt]=(ll)i*i,pk[cnt]=pw(i,k);
for(int j=,d;j<=cnt&&(d=i*p[j])<=base;j++)
{vis[d]=;if(i%p[j]==)break;}
}
for(int i=,j;i<=n;i=n/j+)w[++m]=j=n/i; for(int i=;i<=m;i++)g[i]=w[i]-;
for(int j=,tp=;j<=cnt;j++,tp++)
for(int i=;i<=m&&p2[j]<=w[i];i++)
g[i]-=g[Id(w[i]/p[j])]-tp; int p0=;
for(int j=cnt;j;j--)
{
while(p0<=m&&p2[j]<=w[p0])p0++;
for(int i=p0-;i;i--)
{
int k=Id(w[i]/p[j]);
s[i]+=s[k]+pk[j]*(g[k]-(j-));
}
}
memset(ans,-,sizeof ans);
S(n);
}
signed main()
{
scanf("%u%u",&n,&k);init(n);int prn=;
for(int i=,j,lst=,nw;i<=n;i=n/j+)
{
j=n/i;nw=ans[Id(n/j)];
prn+=j*j*(nw-lst);lst=nw;
}
printf("%u\n",prn);
return ;
}
LOJ 572 「LibreOJ Round #11」Misaka Network 与求和——min_25筛的更多相关文章
- LOJ# 572. 「LibreOJ Round #11」Misaka Network 与求和(min25筛,杜教筛,莫比乌斯反演)
题意 求 \[ \sum_{i = 1}^{n} \sum_{i = 1}^{n} f(\gcd(i, j))^k \pmod {2^{32}} \] 其中 \(f(x)\) 为 \(x\) 的次大质 ...
- Loj#572. 「LibreOJ Round #11」Misaka Network 与求和
题目 有生之年我竟然能\(A\) 这个题求的是这个 \[\sum_{i=1}^n\sum_{j=1}^nf(gcd(i,j))^k\] \(f(i)\)定义为\(i\)的次大质因子,其中\(f(p)= ...
- LOJ572. 「LibreOJ Round #11」Misaka Network 与求和 [莫比乌斯反演,杜教筛,min_25筛]
传送门 思路 (以下令\(F(n)=f(n)^k\)) 首先肯定要莫比乌斯反演,那么可以推出: \[ ans=\sum_{T=1}^n \lfloor\frac n T\rfloor^2\sum_{d ...
- [LOJ#530]「LibreOJ β Round #5」最小倍数
[LOJ#530]「LibreOJ β Round #5」最小倍数 试题描述 第二天,LCR 终于启动了备份存储器,准备上传数据时,却没有找到熟悉的文件资源,取而代之的是而屏幕上显示的一段话: 您的文 ...
- [LOJ#516]「LibreOJ β Round #2」DP 一般看规律
[LOJ#516]「LibreOJ β Round #2」DP 一般看规律 试题描述 给定一个长度为 \(n\) 的序列 \(a\),一共有 \(m\) 个操作. 每次操作的内容为:给定 \(x,y\ ...
- [LOJ#531]「LibreOJ β Round #5」游戏
[LOJ#531]「LibreOJ β Round #5」游戏 试题描述 LCR 三分钟就解决了问题,她自信地输入了结果-- > -- 正在检查程序 -- > -- 检查通过,正在评估智商 ...
- [LOJ#515]「LibreOJ β Round #2」贪心只能过样例
[LOJ#515]「LibreOJ β Round #2」贪心只能过样例 试题描述 一共有 \(n\) 个数,第 \(i\) 个数 \(x_i\) 可以取 \([a_i , b_i]\) 中任意值. ...
- [LOJ#525]「LibreOJ β Round #4」多项式
[LOJ#525]「LibreOJ β Round #4」多项式 试题描述 给定一个正整数 k,你需要寻找一个系数均为 0 到 k−1 之间的非零多项式 f(x),满足对于任意整数 x 均有 f(x) ...
- [LOJ#526]「LibreOJ β Round #4」子集
[LOJ#526]「LibreOJ β Round #4」子集 试题描述 qmqmqm有一个长为 n 的数列 a1,a2,……,an,你需要选择集合{1,2,……,n}的一个子集,使得这个子集中任意两 ...
随机推荐
- oracle11g在没DNS情况下failover的配置方法
1.Oracle 11g引入scan ip ,可在没有DNS的情况下,客户端连接RAC配置failover时,很多情况还是使用oracle10g方式.即在客户端tnsname.ora中配置failov ...
- redis中的"HashMap"
redis是一个存储键值对的内存数据库,其存储键值的方式和java中的HashMap相似. 表征redis数据库的结构体是redisDb (在server.h文件中),redis服务器默认有16个数据 ...
- 进程控制fork vfork,父子进程,vfork保证子进程先运行
主要函数: fork 用于创建一个新进程 exit 用于终止进程 exec 用于执行一个程序 wait 将父进程挂起,等待子进程结束 getpid 获取当前进程的进程ID nice 改变进程的优先级 ...
- UVALive 4174
DES:给出一个字符串.连续空格的个数代表一个新的字符.奇数个表示0.偶数个表示1.然后根据这个码作为ASCII码.写出对应的字符.就是统计空格个数.二进制转换成十进制的小模拟.但是比赛的时候敲得很不 ...
- js中的deom ready执行的问题
一开始我想到这,DOMContentLoaded,不兼容, <!DOCTYPE html> <html> <head> <meta charset=" ...
- CF 463A && 463B 贪心 && 463C 霍夫曼树 && 463D 树形dp && 463E 线段树
http://codeforces.com/contest/462 A:Appleman and Easy Task 要求是否全部的字符都挨着偶数个'o' #include <cstdio> ...
- 主席树模板(poj 2104&&poj2761)
主席树,就是n个线段树,用nlonn的空间实现 首先建立第一个线段树 把要查询的值离散化,建立值的线段树 每一次加入一个点 显然每一次只会修改logn个点 把其他的点直接建边连接即可 代码: #inc ...
- python随机数,随机选择……random
import random from random import random, uniform, randint, randrange, choice, sample, shuffle list = ...
- 我应该直接学 Swift,还是 Objective-C?
当我们发布了Swift语言学习课程之后,收到了很多邮件和私信来问自己是否还需要学习C或者Objective-C.此外,人们似乎还在迷惑Swift到底适合iOS开发生态中的哪些部分.通过这篇文章,我希望 ...
- 2.1 C++类的定义和声明
参考:http://www.weixueyuan.net/view/6333.html 总结: 类相当于一个新的数据类型,定义类对象时,除了能定义单个变量以外,用类定义一个数组或者指针都是可行的. 在 ...