首页 > 其他分享 >P4449 于神之怒加强版 (题解)

P4449 于神之怒加强版 (题解)

时间:2024-07-30 19:17:57浏览次数:15  
标签:prime lfloor 神之怒 frac P4449 题解 sum int aligned

题目链接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{aligned}
ans&=\sum _{i=1}^{n}\sum _{j=1}^{m}\sum _{d=1}^{n}d ^k(d=gcd(i,j))
\end{aligned}

\[把i,j同时除一个d得到 \]

\begin{aligned}
ans&=\sum _{d=1}^{n}\sum _{i=1}^{\lfloor{\frac{n}{d}}\rfloor}\sum _{j=1}^{\lfloor{\frac{m}{d}}\rfloor}d ^k(gcd(i,j)=1)\\
ans&=\sum _{d=1}^{n}\sum _{i=1}^{\lfloor{\frac{n}{d}}\rfloor}\sum _{j=1}^{\lfloor{\frac{m}{d}}\rfloor}d ^k\sum _{e|gcd(i,j)}u(e)\\
ans&=\sum _{d=1}^{n}\sum _{e=1}^{\lfloor{\frac{n}{d}}\rfloor}{\lfloor{\frac{n}{de}}\rfloor}{\lfloor{\frac{m}{de}}\rfloor}d ^ku(e)\\
\end{aligned}

\[式子化到这里你就已经成功了十分之一了,因为这个式子的复杂度是n\sqrt n的,距离5e6的标准还差很多 \]

\[所以我们此处再次套路的使T=de 并改为枚举T,则有 \]

\begin{aligned}
ans&=\sum _{T=1}^{n}\sum _{d|T}\lfloor{\frac{n}{T}}\rfloor \lfloor{\frac{m}{T}}\rfloor d ^ku(\frac{T}{d})
\end{aligned}

\[换一下枚举顺序,把d的枚举放到后面 \]

\begin{aligned}
ans&=\sum _{T=1}^{n}\lfloor{\frac{n}{T}}\rfloor \lfloor{\frac{m}{T}}\rfloor\sum _{d|T} d ^ku(\frac{T}{d})
\end{aligned}

\[这时候的式子就顺眼多了,前面那个显然可以用除法分块在\sqrt n的时间内算出,这时考虑后面那一坨的性质 \]

\[首先显然的是f(d)=d^k是一个积性函数,u(d)更毋庸置疑,两大积性函数相乘,结果也显然是积性函数 \]

\[假定g(T)=\sum _{d|T} d ^ku(\frac{T}{d})那现在问题来了,怎么去利用线性筛去筛这个积性函数 \]

\[先单独考虑积性函数的性质,易知g(a*b)=g(a)*g(b) \]

\[再单独去考虑这个函数的一些性质: \]

\[首先在x为质数时g(x)=\sum _{d|x} d ^ku(\frac{x}{d})中的d既然可以整除x,所以d的值只能取1或x \]

\[首先d=1时,g(x)=1^k*u(x)=u(x)=-1 \]

\[其次d=x时,g(x)=x^k*u(1)=x^k*1=x^k \]

\[求和即为g(x)=x^k-1(x\in prime) \]

\[先导出一个结论:g(p^{x+1})=?(p \in prime),开导! \]

\begin{aligned}
设op=p^{x+1},则有\\
g(op)=\sum _{d|op} d ^ku(\frac{op}{d})
\end{aligned}

\[因为k必然含有平方因子,所以当且仅当d=p^{x+1}和d=p^x时原式有值,分别为 \]

\[g(op)=p^{xk+k}(d=p^{x+1}),g(op)=-p^{xk}(d=p^x) \]

\[求和即为g(p^{x+1})=p^{xk+k}-p^{xk}(p \in prime) \]

\[随后即可导入最后一步g(x*prime)=? (prime|x) \]

\[因为要用g(x)的值去转移g(x*prime),所以我们设g(x*prime)=g(x)*A,再次开导!! \]

\[g(x*prime)=g(x) * A \]

\[感性理解一下,因为prime|x,所以说x*prime和x的质因数种类相同,只是质因数prime的数量多了一 \]

\[我们设a1,a2,a3...an为x不同的质数,c1,c2,c3...cn为其对应的数量,则有他们之间两两互质 \]

\[故g(x)=g(a1^{c1})*g(a2^{c2})*...*g(an^{cn}),带入到等式两边即为 \]

\[g(a1^{c1})*g(a2^{c2})*...*g(prime^{totprime+1})*...*g(an^{cn})=g(a1^{c1})*g(a2^{c2})*...*g(prime^{totprime})*...*g(an^{cn})*A \]

\[约分化简得g(prime^{totprime+1})=g(prime^{totprime})*A \]

\[这时候我们刚推得式子就有用了,带入得: \]

\[g(prime^{totprime+1})=g(prime^{totprime})*A \]

\[prime^{totprime*k+k}-prime^{totprime*k}=prime^{totprime*k}-prime^{totprime*k-k}*A \]

\[即可显然解得A=prime^k \]

\[至此,所有线性筛中的转移已经全部完成,再搭配上前缀和优化,完美的在O(n+\sqrt n)的复杂度内完成了此题 \]

最后就是代码了:

#include<bits/stdc++.h>
using namespace std;
#define int long long 
const int N=5e6+5,p=1e9+7;
int n,m,k,t,x,y,z;
int s[N],f[N];
int prime[N],tot;
bool not_prime[N];
int qpow(int a,int b){
	int ans=1;
	while(b){
		if(b&1)ans=ans*a%p;
		a=a*a%p;
		b>>=1;
	}return ans;
}
void iint(){
	f[1]=1;
	for(int i=2;i<=5000000;i++){
		if(!not_prime[i])prime[++tot]=i,f[i]=(qpow(i,k)-1+p)%p;
		for(int j=1;j<=tot&&i*prime[j]<=5000000;++j){
			not_prime[i*prime[j]]=1;
			if(i%prime[j]==0){
				f[prime[j]*i]=(f[i]*((f[prime[j]]+1)%p))%p;
				break;
			}
			f[i*prime[j]]=f[i]*f[prime[j]]%p;
		}
	}
	for(int i=1;i<=5000000;i++)s[i]=(s[i-1]+f[i])%p;
}
int get(int n,int m){
	int ans=0;
	if(n>m)swap(n,m);
	for(int l=1,r=1;l<=n;l=r+1){
		r=min(n/(n/l),m/(m/l));
		ans=(ans+(s[r]-s[l-1]+p)%p*(n/l)%p*(m/l)%p)%p;
	}return ans;
}
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	// freopen("in.in","r",stdin);
	// freopen("out.out","w",stdout);
	cin>>t>>k;
	iint();
	while(t--){
		cin>>n>>m;
		cout<<get(n,m)<<endl;
	}
	return 0;
}

润喽~~~~~

标签:prime,lfloor,神之怒,frac,P4449,题解,sum,int,aligned
From: https://www.cnblogs.com/houburzyx/p/18333198

相关文章

  • 题解 - Alice
    题目描述Alice和Bob在玩游戏,游戏规则如下:有两堆石子,每堆石子有非负整数个Alice与Bob轮流操作,Alice先手,每次可以从任意一堆石子中取出若干个取出的石子个数应满足为另一堆石子个数的因数(此处规定任何数均为0的因数)将石子取完的玩家获胜给定一个初始状态,现......
  • [POI2007] OSI-Axes of Symmetry 题解
    给出一个多边形,求对称轴数量。考虑对于一个多边形,其是对称的当且仅当对于若干个边(角),其左右的角与边都是对称的。考虑如果我们对于内角构造出一种单射,映射为一个整数,将边映射为它的边长,那么我们按照角,边,角,边,……的顺序将他们加入数组中,能构造出一个长度为\(2n\)的数组,将这个......
  • 旅行 题解
    题目id:20300题目描述鱼大大计划环华夏自驾游游玩一圈,在他的计划中,这次旅行将在\(m\)天内完成,预计游玩\(n\)个城市,每个城市游玩\(x\)天,然后赶路开车以均速去到下一个城市,现鱼大大从海洋城市出发,按游玩顺序先后给出每个城市和上一个城市之间的距离(\(km\)),问鱼大大每天至少赶路多......
  • 质数差列 题解
    题目id:20315题目描述驰骋宇宙的鱼大大找到了一个古遗迹,稍作研究后发现这是一个来着远古的质数星球文明遗迹,这个文明的特点是所有事物都和质数息息相关。于是,鱼大大赶紧列出了一堆的质数,以方便自己的研究。这天鱼大大找到了质数星球文明的一个遗迹仓库大门,正准备破解密码的同时......
  • [POI2008] POC-Trains 题解
    前言题目链接:洛谷。时间复杂度和输入同阶的做法。题意简述有\(n\)(\(n\leq10^3\))个长\(m\)的字符串,\(q\)(\(q\leq10^5\))次操作,交换两个字符串的两个字符。问每个字符串在所有时刻,最多有几个和它相等。题目分析套路做法看到字符串相等,想到使用哈希。但是要支持修改,怎么......
  • 题解:[ABC363D] Palindromic Number
    提示特定位数的回文数数量是可以快速计算出来的,对于特定的位数\(n\),第一位由于不能有前导\(0\),共有\(9\)种选择,而从第\(2\)位到第\(\frac{n+1}{2}\)位都有\(10\)种选择(一个回文数完全由它的前半部分确定)。所以\(n\)位数中共有\(S(n)=9*10^\frac{n-1}{2}......
  • P3811 【模板】模意义下的乘法逆元 题解
    【模板】模意义下的乘法逆元题目背景这是一道模板题题目描述给定n,pn,pn,p求......
  • 题解:Codeforces Round 962 (Div. 3) D
    D.Funtimelimitpertest:2secondsmemorylimitpertest:256megabytesinput:standardinputoutput:standardoutputCountingisFun!—satyam343Giventwointegers\(n\)and\(x\),findthenumberoftriplets(\(a,b,c\))ofpositiveintegerss......
  • [USACO1.5] 八皇后 Checker Challenge 题解
    [USACO1.5]八皇后CheckerChallenge题目描述一个如下的\(6\times6\)的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行、每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子。上面的布局可以用序列\(2\4\6\1\3\5\)来描述,第\(i\)个数字表示在......
  • 题解:P10815 【模板】快速读入
    闲着没事儿水篇tj题目大意题目大意极其粗暴,记得\(10^8\times10^8=10^{16}>2^{31}-1\)会爆int,开longlong就好。于是这个题就变成了一个读入输出优化模板题。这不又回去了。另外,输入输出常数优化也很常用,抢最优解和骗分时都可以用上。1cin/cout版本操作ios::......