P6222 「简单题」加强版 莫比乌斯反演 线性筛积性函数
LINK:简单题
以前写过弱化版的 不过那个实现过于垃圾 少预处理了一个东西。
这里写一个实现比较精细了。
最后可推出式子:\(\sum_{T=1}^nsum(\frac{n}{T})\sum_{x|T}(\frac{T}{x})^kx^k\mu(\frac{T}{x})^2\mu(x)\)
其中 \(sum(x)=\sum_{i=1}^{x}\sum_{j=1}^{x}(i+j)^k\)
先看前面的那项 由于是完全积性函数先筛出\(i^k\)复杂度可近乎是O(n)的。
考虑上面的式子怎么求?再设\(w_x=\sum_{i=1}^x(i+x)^k\)
显然 \(w_x=w_{x-1}+(2x-1)^k+(2x)^k-x^k\)
显然 \(sum_x=sum_{x-1}+2w_x-(2x)^k\)
后面那项 考虑积性函数筛出 可以发现当其中的质因子p的指数>=3时为0.
那么每次可以特判一下是否为2 简单计算一下即可。
有点卡空间 所以就把 sum w 前缀和数组给整到一块了/cy
const int MAXN=10000010,maxn=2000010;
int T,n,top,k;
int p[maxn];
bitset<MAXN<<1>v;
ui s[MAXN<<1],b[MAXN<<1];
inline ui ksm(ui b,int p)
{
ui cnt=1;
while(p)
{
if(p&1)cnt=cnt*b;
p=p>>1;b=b*b;
}
return cnt;
}
inline void prepare()
{
int m=n<<1;b[1]=s[1]=1;
rep(2,m,i)
{
if(!v[i])
{
p[++top]=i;
s[i]=ksm(i,k);
b[i]=s[i]*i-s[i];
}
rep(1,top,j)
{
if(p[j]>m/i)break;
v[i*p[j]]=1;
s[i*p[j]]=s[i]*s[p[j]];
if(i%p[j]==0)
{
if(i/p[j]%p[j]!=0)b[i*p[j]]=s[p[j]]*s[p[j]]*p[j]*(-1)*b[i/p[j]];
break;
}
b[i*p[j]]=b[i]*b[p[j]];
}
}
ui las=0;
rep(1,n,i)
{
b[i]+=b[i-1];
s[i]=las+s[2*i-1]+s[i<<1]-s[i];
las=s[i];s[i]=-s[i<<1]+s[i-1]+2*s[i];
}
}
int main()
{
//freopen("1.in","r",stdin);
get(T);get(n);get(k);
prepare();
while(T--)
{
get(n);ui ans=0;
int w1,ww;
for(int i=1;i<=n;i=ww+1)
{
w1=n/i;ww=n/w1;
ans+=s[w1]*(b[ww]-b[i-1]);
}
printf("%u\n",ans);
}
return 0;
}
P6222 「简单题」加强版 莫比乌斯反演 线性筛积性函数的更多相关文章
- 莫比乌斯反演/线性筛/积性函数/杜教筛/min25筛 学习笔记
最近重新系统地学了下这几个知识点,以前没发现他们的联系,这次总结一下. 莫比乌斯反演入门:https://blog.csdn.net/litble/article/details/72804050 线 ...
- BZOJ 4407: 于神之怒加强版 莫比乌斯反演 + 线筛积性函数
Description 给下N,M,K.求 Input 输入有多组数据,输入数据的第一行两个正整数T,K,代表有T组数据,K的意义如上所示,下面第二行到第T+1行,每行为两个正整数N,M,其意 ...
- 【bzoj4407】于神之怒加强版 莫比乌斯反演+线性筛
题目描述 给下N,M,K.求 输入 输入有多组数据,输入数据的第一行两个正整数T,K,代表有T组数据,K的意义如上所示,下面第二行到第T+1行,每行为两个正整数N,M,其意义如上式所示. 输出 如题 ...
- 【BZOJ-4407】于神之怒加强版 莫比乌斯反演 + 线性筛
4407: 于神之怒加强版 Time Limit: 80 Sec Memory Limit: 512 MBSubmit: 241 Solved: 119[Submit][Status][Discu ...
- BZOJ 4407: 于神之怒加强版 [莫比乌斯反演 线性筛]
题意:提前给出\(k\),求\(\sum\limits_{i=1}^n \sum\limits_{j=1}^m gcd(i,j)^k\) 套路推♂倒 \[ \sum_{D=1}^n \sum_{d|D ...
- BZOJ4407: 于神之怒加强版(莫比乌斯反演 线性筛)
Description 给下N,M,K.求 感觉好迷茫啊,很多变换看的一脸懵逼却又不知道去哪里学.一道题做一上午也是没谁了,, 首先按照套路反演化到最后应该是这个式子 $$ans = \sum_{d ...
- 线性筛积性函数+反演T套路——bzoj4407
#include<bits/stdc++.h> using namespace std; #define ll long long #define mod 1000000007 #defi ...
- 【bzoj2693】jzptab 莫比乌斯反演+线性筛
题目描述 输入 一个正整数T表示数据组数 接下来T行 每行两个正整数 表示N.M 输出 T行 每行一个整数 表示第i组数据的结果 样例输入 1 4 5 样例输出 122 题解 莫比乌斯反演+线性筛 由 ...
- 【bzoj2694】Lcm 莫比乌斯反演+线性筛
题目描述 求$\sum\limits_{i=1}^n\sum\limits_{j=1}^m|\mu(gcd(i,j))|lcm(i,j)$,即$gcd(i,j)$不存在平方因子的$lcm(i,j)$之 ...
随机推荐
- Meta标签大全_web开发常用meta整理
meta标签提供关于HTML文档的元数据.元数据不会显示在页面上,但是对于机器是可读的.它可用于浏览器(如何显示内容或重新加载页面),搜索引擎(关键词),或其他 web 服务. 必要属性 属性 值 描 ...
- WireGuard 教程:WireGuard 的工作原理
原文链接:https://fuckcloudnative.io/posts/wireguard-docs-theory/ WireGuard 是由 Jason Donenfeld 等人用 C 语言编写 ...
- 在java中捕获异常时,使用log4j打印出错误堆栈信息
当java捕获到异常时,把详细的堆栈信息打印出来有助于我们排查异常原因,并修复相关bug,比如下面两张图,是打印未打印堆栈信息和打印堆栈信息的对比: 那么在使用log4j输出日志时,使用org.apa ...
- 一篇文章掌握 Python 内置 zip() 的全部内容
一篇文章掌握 Python 内置 zip() 的全部内容 zip() 是 Python 中最好用的内置类型之一,它可以接收多个可迭代对象参数,再返回一个迭代器,可以把不同可迭代对象的元素组合起来. 我 ...
- 数据可视化之powerBI入门(十)认识Power BI的核心概念:度量值
https://zhuanlan.zhihu.com/p/64150720 本文学习PowerBI最重要的概念:度量值 初学Power BI一般都会对度量值比较困惑,毕竟对长期接触Excel的人来说, ...
- Flask 基础组件(六):Session
除请求对象之外,还有一个 session 对象.它允许你在不同请求间存储特定用户的信息.它是在 Cookies 的基础上实现的,并且对 Cookies 进行密钥签名要使用会话,你需要设置一个密钥. 设 ...
- 利用vue-i18n实现多语言切换
在vue项目中利用vue-i18n,我们可以实现多语言的切换,可以轻松搞定大部分的需求,包括中英文切换,以及词条的变更. vue-i18n基本的使用方法 一.安装vue-i18n npm instal ...
- SQL中的多表联查(SELECT DISTINCT 语句)
前言:(在表中,可能会包含重复值.这并不成问题,不过,有时你也许希望仅仅列出不同(distinct)的值. 关键词 DISTINCT 用于返回唯一不同的值.) 如果不加DISTINCT 的话,主表本来 ...
- 在Access中执行SQL
1.基本介绍 Microsoft Access在很多地方得到广泛使用,例如小型企业,大公司的部门.喜爱编程的开发人员亦利用它来制作处理数据的桌面系统.它也常被用来开发简单的WEB应用程序. 2.Ace ...
- day10:函数的实参&形参
函数的参数 (参数:配合函数运算的值)参数: (1)形参:形式参数,在函数的定义处 (2)实参:实际参数,在函数的调用处 形参: 普通形参(位置) , 默认形参 , 普通收集形参 ...