首页 > 其他分享 >P6222 「P6156 简单题」加强版

P6222 「P6156 简单题」加强版

时间:2024-08-19 15:08:37浏览次数:11  
标签:P6222 cnt 加强版 P6156 sum mu define displaystyle fo

P6222 「P6156 简单题」加强版

\(T\) 组询问。一开始给定一个常数 \(m\)。每次询问单独给定 \(n\)。请你求出:

\(\sum_{i=1}^{n}\sum_{j=1}^{n} (i+j)^m \gcd(i,j) \mu^2(\gcd(i,j)) \pmod {2^{32}}\)
枚举k=(i,j)

\(\displaystyle \sum_{k}k\mu^{2}(k)\sum_{i=1}^{n/k}\sum_{j=1}^{n/k}(ik+jk)^m[(i,j)=1]\)

经典莫反
\(=\displaystyle \sum_{k}k\mu^{2}(k)\sum_{i=1}^{n/k}\sum_{j=1}^{n/k}(ik+jk)^m \sum_{d|i,d|j}\mu(d)\)
\(=\displaystyle \sum_{k}k\mu^{2}(k) \sum_{d}\sum_{i=1}^{n/kd}\sum_{j=1}^{n/kd}(ikd+jkd)^m\)

\(=\displaystyle \sum_{T}T^m\sum_{k|T}k\mu^2(k)\mu({\frac{T}{k}})\sum_{i=1}^{n/T}\sum_{j=1}^{n/T}(i+j)^m\)

设\(S(n)=\displaystyle \sum_{i=1}^{n}\sum_{j=1}^{n}(i+j)^m\)
将表格写出来之后
发现\(S(n)-S(n-1)\)是两段连续的数的k次方和。
所以我们只用求k次方和即可,而这个东西其实也是可以筛的。

对于
\(g(T)=\displaystyle\sum_{k|T}k\mu^2(k)\mu({\frac{T}{k}})\)
明显g是积性函数
考虑质因子\(p^c\)的贡献

  • c=1,贡献为p-1
  • c=2,贡献为-p
  • \(c >2\) ,贡献为0

那么直接线筛即可。

#include<bits/stdc++.h>
#define fo(i,a,b) for (uint (i)=(a);(i)<=(b);(i)++)
#define fd(i,b,a) for (ll (i)=(b);(i)>=(a);(i)--)
#define eb emplace_back
#define pi pair<ll,ll>
#define mk(x,y) make_pair((x),(y))
#define lc (o<<1)
#define rc ((o<<1)|1)
//#define A puts("Yes")
//#define B puts("No")
#define fi first
#define se second
using namespace std;
typedef unsigned int uint;
typedef double db;
const int N=2e7+5;
const int M=1e6+5;
uint z[N],s[N];
long long g[N/2];
uint p[M],tot,n,m,f[N];
int cnt[N];
bool vis[N];
uint power(uint a,uint b){
	uint t=1,y=a;
	while (b) {
		if (b&1) t=t*y;
		y=y*y;
		b/=2;
	}
	return t;
}
int main() {
//    freopen("data.in", "r", stdin);
//    freopen("data.out", "w", stdout);

	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	
	int T;
	cin>>T>>n>>m;
	fo(i,2,n*2) {
		if (!vis[i]) {
			p[++tot]=i;
			z[i]=power(i,m);
		}
		fo(j,1,tot) {
			if (i*p[j]>=N) break;
			vis[i*p[j]]=1;
			z[i*p[j]]=z[i]*z[p[j]];
			if (i%p[j]==0) break;	
		}
	}
	
	fo(i,2,n) {
		if (!vis[i]) {
			cnt[i]=1;
			g[i]=i-1;
		}
		fo(j,1,tot) {
			if (i*p[j]>n) break;
			if (i%p[j]==0) {
				if (cnt[i]>=2) g[i*p[j]]=0,cnt[i*p[j]]=3;
				else if (cnt[i]==1) {
					cnt[i*p[j]]=2;
					g[i*p[j]]=g[i]/(p[j]-1)*(-p[j]);
				}
				break;	
			}
			g[i*p[j]]=g[i]*(p[j]-1),cnt[i*p[j]]=1;
		}
	}
	
	g[1]=1;
	z[1]=1;
	fo(i,2,n*2) z[i]=z[i]+z[i-1];

	s[1]=power(2,m);
	fo(i,2,n) s[i]=s[i-1]+z[2*i-1]-z[i]+z[2*i]-z[i];
	
	fo(i,1,n) f[i]=f[i-1]+(z[i]-z[i-1])*(uint)g[i];
		
	while (T--) {
		cin>>n;
		uint ans=0;
		for (uint lt=1,rt;lt<=n;lt=rt+1) {
			rt=n/(n/lt);
			ans+=(f[rt]-f[lt-1])*s[n/lt];
		}
		cout<<ans<<"\n";
	}
	
	
    return 0;
    


}

总结:

  • 自然数k次幂也是可以用筛法求的。
  • 对于积性函数,可以讨论每个质因子\(p^c\)的贡献,然后乘起来。

标签:P6222,cnt,加强版,P6156,sum,mu,define,displaystyle,fo
From: https://www.cnblogs.com/ganking/p/18367308

相关文章

  • 【Tarjan SCC 加边使得所有图联通 至少选取多少个点能图联通 】Network of Schools加
    [P2812校园网络【USACO]NetworkofSchools加强版大意:1.图G=(V,E)选几个点可以到达所有的点2.连多少条边可以让任意一个点出发到达其他所有点1思路:1.Tarjan跑一遍求SCC那些出度为0的点就是出发的所有点即din0的点的数量2.计算dout0的点的数量和din0的点的数量取max......
  • 【CDQ分治】[P5094 [USACO04OPEN] MooFest G 加强版
    P5094[USACO04OPEN]MooFestG加强版-洛谷|计算机科学教育新生态(luogu.com.cn)#include<bits/stdc++.h>usingnamespacestd;usingi64=longlong;intmain(){ios::sync_with_stdio(false);cin.tie(nullptr);intn;cin>>n;vecto......
  • P4449 于神之怒加强版 (题解)
    题目链接P4449于神之怒加强版题目大意:求\[\sum_{i=1}^{n}\sum_{j=1}^{m}gcd(i,j)^k\]\(数据范围n,m\leq5e6\)\(二话不说,先开导式子(假定n<m):\)\begin{aligned}ans&=\sum_{i=1}^{n}\sum_{j=1}^{m}gcd(i,j)^k\\\end{aligned}\[先套路地枚举d=gcd(i,j)\]\begin{align......
  • App Inventor 2 低功耗蓝牙 BlueToothLE 拓展中文文档(完整翻译加强版)
    低功耗蓝牙,也称为蓝牙LE或简称BLE,是一种类似于经典蓝牙的新通信协议,不同之处在于它旨在消耗更少的功耗和成本,同时保持同等的功能。因此,低功耗蓝牙是与耗电资源有限的物联网设备进行通信的首选。BluetoothLE扩展需要Android5.0或更高版本。BlueToothLE拓展中文文档入口......
  • 简单题 加强版
    由简单版中,我们已经推出了\[\sum_{d=1}^n\mu^2(d)d^{k+1}\sum_{t=1}^{\lfloor{\frac{n}{d}}\rfloor}\mu(t)t^k\sum_{i=1}^{\lfloor{\frac{n}{dt}}\rfloor}\sum_{j=1}^{\lfloor{\frac{n}{dt}}\rfloor}(i+j)^k\]我们设\(T=td\),则设\(S(x)=\sum_{i=1}^x\sum_{j=1......
  • P5825 排列计数 加强版
    加强版和原题不同之处在于\(p\)不再是一个排列,而是一个普通的值域为\([1,n]\)的数组考虑将\([p_i<p_{i+1}]\)转化为\(1-[p_i\gep_{i+1}]\),方便计算后面的\(g\),也就是恰好\(n-k-1\)不上升点的方案数记一段不上升点的连续段为非升段,\(f_i\)表示恰好\(i\)个不上升......
  • IOI2022 邮局 加强版 题解
    [IOI2000]邮局加强版题解考虑动态规划,设\(f_{i,j}\)为经过了\(i\)个村庄,正在建第\(j\)​个邮局的最优距离。以及\(w_{i,j}\)表示区间\([i,j]\)​内建一个邮局时的距离总和。\(a\)数组表示每个村庄的坐标编号。朴素版状态转移方程:\[f_{i,j}=\min(f_{i,j},f_{k,j......
  • P8592 『JROI-8』颅脑损伤 2.0(加强版)(线性 dp + 单调队列优化)
    P8592『JROI-8』颅脑损伤2.0(加强版)线性dp+单调队列优化最优化问题,考虑dp。先离散化,按左端点排序,设\(f_i\)表示考虑完前\(i\)条线段符合条件的染色,最小长度和。转移枚举上一条红色线段\(j\),\(f_i=f_j+len_i\)。当然\(j\)需要满足题目的条件,即\((j,i)\)中的黑色线......
  • SciTech-点焊机-微波炉变压器制作一台1000W电流500A的加强版点焊机;
    用微波炉变压器制作一台加强版点焊机:输出电流500A,功率1000瓦微波炉有大功率全铜变压器。初级线圈由大功率可控硅控制导通时间;次级拆除,用超大粗铜导线绕3圈或数圈,得到低压大功率次级输出,作为点焊能源。常用的微波炉电路图:控制板部分由“低压变压器”输送功率;2.整机大部......
  • kedaOJ#P0609. 质因分解加强版
    题目P0609.质因分解加强版思路代码#include<iostream>#include<vector>#include<string>std::stringprimeFactorization(intn){std::vector<int>factors;std::vector<int>counts;for(inti=2;i*i<=n;++i)......