【GDCPC2024】【min_25筛】J.另一个计数问题

题目

传送门
在这里插入图片描述

思路

考场上的思路和正解差远了,属实是反演学魔怔了。

首先,对于所有的 x x x,它可以通过 2 x 2x 2x 2 2 2 连通,而 2 2 2 又可以和所有 m i n p ≤ ⌊ n 2 ⌋ minp\leq \left\lfloor\frac{n}{2}\right\rfloor minp2n 的数连通。所以只有 p > ⌊ n 2 ⌋ p>\left\lfloor\frac{n}{2}\right\rfloor p>2n 是被孤立的点。

那么,答案就可以转换成
∑ u = 2 n − 1 ∑ v = u + 1 n [ m i n p ( u ) < ⌊ n 2 ⌋ & m i n p ( v ) < ⌊ n 2 ⌋ ] u v = ∑ u = 2 n − 1 ∑ v = u + 1 n u v − ∑ p > ⌊ n 2 ⌋ p ( ∑ v > p v + ∑ u < p u ) + ∑ p 1 > ⌊ n 2 ⌋ p 1 ∑ p 2 > p 1 p 2 = ∑ u = 2 n − 1 ∑ v = u + 1 n u v − ∑ p > ⌊ n 2 ⌋ p ∑ v = 2 n v + 1 2 ( ( ∑ p > ⌊ n 2 ⌋ p ) 2 + ∑ p > ⌊ n 2 ⌋ p 2 ) \sum_{u=2}^{n-1}\sum_{v=u+1}^n[minp(u)<\left\lfloor\frac{n}{2}\right\rfloor \& minp(v)<\left\lfloor\frac{n}{2}\right\rfloor]uv\\ =\sum_{u=2}^{n-1}\sum_{v=u+1}^nuv-\sum_{p>\left\lfloor\frac{n}{2}\right\rfloor}p\left(\sum_{v>p}v+\sum_{u<p}u \right)+\sum_{p_1>\left\lfloor\frac{n}{2}\right\rfloor}p_1\sum_{p_2>p_1}p_2\\ =\sum_{u=2}^{n-1}\sum_{v=u+1}^nuv-\sum_{p>\left\lfloor\frac{n}{2}\right\rfloor}p\sum_{v=2}^nv+\frac{1}{2}\left(\left(\sum_{p>\left\lfloor\frac{n}{2}\right\rfloor}p\right)^2+\sum_{p>\left\lfloor\frac{n}{2}\right\rfloor}p^2\right) u=2n1v=u+1n[minp(u)<2n&minp(v)<2n]uv=u=2n1v=u+1nuvp>2np(v>pv+u<pu)+p1>2np1p2>p1p2=u=2n1v=u+1nuvp>2npv=2nv+21 p>2np 2+p>2np2

所以我们只需要用 min25筛 求出质数的和还有平方和就可以啦。用 g ( n , ∣ P ∣ ) g(n,|P|) g(n,P) 即可。
注意,不要跑两遍,会T。 ⌊ n 2 ⌋ \left\lfloor\frac{n}{2}\right\rfloor 2n 是在整除分块中求过的,可以直接用。

代码

#include<bits/stdc++.h>
#define int long long

using namespace std;
const int N=1e6+7,inf=1e18,mod=998244353;
int sqr,n,tot;
vector<int> sp1(N),sp2(N),g1(N),g2(N),w(N),id1(N),id2(N),p;
int power(int x,int t)
{
	int b=1;
	while(t)
	{
		if(t&1) b=b*x%mod;
		x=x*x%mod; t>>=1;
	}
	return b;
}
void init(int n)
{
	p.push_back(0);
	tot=0;
	vector<bool> bz(n+1);
	for(int i=2; i<=n; i++)
	{
		if(!bz[i])
		{
			p.push_back(i);
			int now=p.size()-1;
			sp1[now]=(sp1[now-1]+i)%mod;
			sp2[now]=(sp2[now-1]+i*i%mod)%mod;
		}
		for(auto j:p)
		{
			if(!j) continue;
			if(i*j>n) break;
			bz[i*j]=1;
			if(i%j==0) break;
		}
	}
}
void O_o()
{
	cin>>n;
	sqr=sqrt(n);
	init(sqr);
	int inv2=power(2,mod-2),inv3=power(3,mod-2);
	for(int i=1,j; i<=n; i=j+1)
	{
		j=n/(n/i);
		w[++tot]=n/i;
		int now=w[tot]%mod;
		g1[tot]=now*(now+1)/2%mod-1;
		g2[tot]=now*(now+1)%mod*(2*now+1)%mod*inv2%mod*inv3%mod-1;
		if(w[tot]<=sqr) id1[w[tot]]=tot;
		else id2[n/w[tot]]=tot;
	}
	for(int i=1; i<p.size(); i++)
	{
		for(int j=1; j<=tot,p[i]*p[i]<=w[j]; j++)
		{
			int k=w[j]/p[i]<=sqr?id1[w[j]/p[i]]:id2[n/(w[j]/p[i])];
			//g(w[j],i) = g(w[j],i-1) - f'(p[i])*(g(w[k],j-1)-sp[i-1])
			(g1[j]-=p[i]*(g1[k]-sp1[i-1])%mod)%=mod;
			(g2[j]-=p[i]*p[i]%mod*(g2[k]-sp2[i-1])%mod)%=mod;
		}
	}
	int f1=g1[1],f2=g2[1];//g(n,|P|)
	int k=n/2<=sqr?id1[n/2]:id2[n/(n/2)];
	int h1=g1[k],h2=g2[k];//g(n/2,|P|)
	n%=mod;
	int ans=inv2*(inv2*(n*n%mod+n)%mod*(n*(n-1)%mod-2)%mod
	-inv2*inv2%mod*n%mod*n%mod*(n-1)%mod*(n-1)%mod+2
	-inv2*inv3%mod*n%mod*(n-1)%mod*(2*n-1)%mod)%mod;
	ans=ans-(n*(n+1)/2%mod-1)*(f1-h1)%mod+((f1-h1)*(f1-h1)%mod-(f2-h2))*inv2%mod+(f2-h2);
	ans%=mod;
	(ans+=mod)%=mod;
	cout<<ans<<"\n";
}
signed main()
{
	ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
	cout<<fixed<<setprecision(2);
	int T=1;
//	cin>>T;
	while(T--)
	{
		O_o();
	}
}

  • 22
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值