首页 > 技术文章 > HDU - 6063 RXD and math 题解

JustinRochester 2021-03-30 23:02 原文

传送门


【分析】

等价于分析

\(\quad ans\)

\(\displaystyle =\sum_{i=1}^n \boldsymbol \mu^2(i)\lfloor\sqrt {n\over i}\rfloor\)

考虑莫比乌斯函数 \(\boldsymbol \mu(n)\) 不为 \(0\) 时的取值一定为 \(\pm 1\)

\((\forall n\to \boldsymbol \mu(n)\neq 0)\to \boldsymbol \mu^2(n)=1\)

而使得 \(\boldsymbol \mu(n)\neq 0\) ,则 \(\not\exists p^2\to p^2\mid n(p\in Prime)\)


考虑每个 \(t=a^2\cdot b\) 的形式(\(a\) 是极大的形式),则 \(\boldsymbol \mu^2(b)=1\)

考虑将正整数集 \(Z\) ,按上述 \(b\) 进行归纳,会发现,对于 \(\forall n\in Z\) ,有且仅有一个 \(b\) 使得 \(n\) 被归纳进 \(b\) 所在的集合

因此该归纳构成对正整数集 \(Z\) 的一个划分

故对于 \([1,n]\) 范围内每个 \(b\) ,设其所在集合为 \(H_b\) ,则 \(|H_b|=\lfloor\sqrt {n\over b}\rfloor\)

存在 \(1\)\(a(a=1)\) 使得 \(\boldsymbol \mu^2(a^2\cdot b)=1\)

且存在 \((\sqrt{n\over b}-1)\)\(a\) 使得 \(\boldsymbol \mu^2(a^2\cdot b)=0\)

\(H_b\) 对求和式的贡献为 \(\displaystyle \sum_{a^2\cdot b\leq n}\boldsymbol \mu^2(a^2\cdot b)\lfloor\sqrt {n\over a^2\cdot b}\rfloor=\boldsymbol \mu^2(b)\lfloor\sqrt{n\over b}\rfloor+0=\lfloor\sqrt {n\over b}\rfloor=|H_b|\)

故对于所有的 \(H_b\) 的贡献求和得到 \(\displaystyle ans=\sum_{b\leq n}|H_b|=n\)


故对于原题,直接得到答案为 \(n^k\)

记得先取模再快速幂即可


【代码】

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int P=1e9+7;
inline ll fpow(ll a,ll x) { ll ans=1; for(a%=P;x;x>>=1,a=a*a%P) if(x&1) ans=ans*a%P; return ans; }
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	ll n,k;
	for(int i=1;cin>>n>>k;++i)
		cout<<"Case #"<<i<<": "<<fpow(n,k)<<"\n";
	cout.flush();
	return 0;
}

推荐阅读