首页 > 其他分享 >P3768 简单的数学题

P3768 简单的数学题

时间:2024-09-23 08:51:54浏览次数:9  
标签:lfloor frac sum rfloor mu 数学题 简单 P3768 displaystyle

简单的数学题

题目描述

由于出题人懒得写背景了,题目还是简单一点好。

输入一个整数 \(n\) 和一个整数 \(p\),你需要求出:

\[\left(\sum_{i=1}^n\sum_{j=1}^n ij \gcd(i,j)\right) \bmod p \]

其中 \(\gcd(a,b)\) 表示 \(a\) 与 \(b\) 的最大公约数。

输入格式

一行两个整数 \(p,n\)。

输出格式

一行一个整数表示答案。

样例 #1

样例输入 #1

998244353 2000

样例输出 #1

883968974

提示

对于 \(20\%\) 的数据,\(n \leq 1000\)。

对于 \(30\%\) 的数据,\(n \leq 5000\)。

对于 \(60\%\) 的数据,\(n \leq 10^6\),时限 1s。

对于另外 \(20\%\) 的数据,\(n \leq 10^9\),时限 3s。

对于最后 \(20\%\) 的数据,\(n \leq 10^{10}\),时限 4s。

对于 \(100\%\) 的数据,\(5 \times 10^8 \leq p \leq 1.1 \times 10^9\) 且 \(p\) 为质数。

链接

\(\displaystyle\sum_{d=1}^{min(n,m)}\displaystyle\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\displaystyle\sum_{j=1}^{\lfloor\frac{m}{d}\rfloor}ijd^3[gcd(i,j)=1]\)

\(\displaystyle\sum_{d=1}^{min(n,m)}d^3\displaystyle\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}i\displaystyle\sum_{j=1}^{\lfloor\frac{m}{d}\rfloor}j[gcd(i,j)=1]\)
\(\displaystyle\sum_{d=1}^{min(n,m)}d^3\displaystyle\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}i\displaystyle\sum_{j=1}^{\lfloor\frac{m}{d}\rfloor}j\displaystyle\sum_{e=1}^{min(i,j)}\mu(e)[e|i][e|j]\)
\(\displaystyle\sum_{d=1}^{min(n,m)}d^3\displaystyle\sum_{e=1}^{min(n,m)}\mu(e)e^2\displaystyle\sum_{i=1}^{\lfloor\frac{n}{de}\rfloor}i\displaystyle\sum_{j=1}^{\lfloor\frac{m}{de}\rfloor}j\)
设\(sum({\lfloor\frac{n}{de}\rfloor},{\lfloor\frac{m}{de}\rfloor})=\displaystyle\sum_{i=1}^{\lfloor\frac{n}{de}\rfloor}i\displaystyle\sum_{j=1}^{\lfloor\frac{m}{de}\rfloor}j\),很容易算出。

原式\(=\displaystyle\sum_{d=1}^{min(n,m)}d^3\displaystyle\sum_{e=1}^{min(n,m)}\mu(e)e^2sum({\lfloor\frac{n}{de}\rfloor},{\lfloor\frac{m}{de}\rfloor})\)
只要能够快速计算\(\sum d^3\)和\(\sum\mu(e)e^2\)就可以了
可以发现两个都是积性函数,用杜教筛可以。
\(n\leq 1e10\),两个整除分块,然后还要带一个杜教赛。。。真能过吗?
包过不了的。

\(gcd(i,j)=\displaystyle\sum_{k|i,k|j}\phi(k)\)

我草我才看到没有\(m\),只有\(n\)。。那可以简化一下了
\(\displaystyle\sum_{d=1}^{n}d^3\displaystyle\sum_{e=1}^{\lfloor \frac n d\rfloor}\mu(e)e^2(\displaystyle\sum_{k=1}^{\lfloor\frac{n}{de}\rfloor}k)^2\)
总共有两个枚举因数的部分...是不是这样的话就可以简化?
令\(T=de\)
\(\displaystyle\sum_{T=1}^{n}(sum(\lfloor\frac n T\rfloor))^2\displaystyle\sum_{d|T}d^3(\frac T d)^2\mu(\frac T d)\)
\(\displaystyle\sum_{T=1}^{n}(sum(\lfloor\frac n T\rfloor))^2T^2\displaystyle\sum_{d|T}d\mu(\frac T d)\)

这个替换有点难理解。。我总感觉会漏东西。哦,其实先把\(d\)的部分和后面\(e\)的部分写在一起就好了
然后就是考虑怎么计算\(T^2\displaystyle\sum_{d|T}d\mu(\frac T d)\),然后可以发现,后面的形式就是狄利克雷卷积的形式。其实后面的部分可以用这个改写。
用\(*\)表示狄利克雷卷积,那么\(T^2\displaystyle\sum_{d|T}d\mu(\frac T d)=T^2(id*\mu)(T)\),熟悉的话其实就能够发现,\(id*\mu=\phi\)
那么后面的部分就变成了\(T^2\phi(T)\)。对于\(\displaystyle\sum_{d|T}\)这种东西要敏感,他在莫反里面其实很重要,虽然其实是狄利克雷卷积很好用。
只需要两个枚举因子的部分就能够产生出\(\displaystyle\sum_{d|T}\),而莫反的题目,出现了\(gcd\)之后,两个枚举因子的循环的出现也是轻轻松松。所以更是能体现重要性
然后对于\(T^2\phi(T)\),我们考虑直接用杜教筛筛出,观察杜教筛核心\(g(1)S(n)=\displaystyle\sum_{i=1}^n(f*g)(i)-\displaystyle\sum_{d=2}^ng(d)S({\lfloor\frac{n}{d}\rfloor})\)
我们所需要求的为\(S(n)=\sum f(i),f(i)=i^2\phi(i)\),只需要保证\(f*g\)和任意一个\(g(i)\)容易得到即可。
直接构造\(g(i)=i^2\),可以发现\((f*g)(i)=\displaystyle\sum_{d|i}\phi(d)d^2\times (\frac i d)^2=i^2*\displaystyle\sum_{d|i}\phi(d)=i^3\),所以\(\displaystyle\sum_{i=1}^n(f*g)(i)=\displaystyle\sum_{i=1}^ni^3=(\displaystyle\sum_{i=1}^ni)^2\)
就能算了。

居然不用整除分块?
\(\displaystyle\sum_{T=1}^{n}(sum(\lfloor\frac n T\rfloor))^2T^2\phi(T)\)
哦要的,不然T了。

#include<bits/stdc++.h>
#define ll long long
using namespace std;
inline ll read(){
	ll a=0,b=1;char c=getchar();
	for(;c<'0'||c>'9';c=getchar())if(c=='-')b=-1;
	for(;c>='0'&&c<='9';c=getchar())a=a*10+c-'0';
	return a*b;
}
const ll N=7e6;
ll phi[N+1],prim[N+1],cnt,mu[N+1],n,p,Ned[N+1],inv2,inv6;
unordered_map<ll,ll> ans_mu,ans_phi,ans_Ned;
ll vis[N+1];
inline ll ksm(ll x,ll y)
{
	if(y==1)return x;
	if(y==0)return 0;
	if(y%2==1)
	{
		ll now=ksm(x,y/2)%p;
		return now*now%p*x%p;
	}
	else
	{
		ll now=ksm(x,y/2)%p;
		return now*now%p;
	}
}
ll Sum_mu(ll n)
{
	if(n<=N)return mu[n];
	if(ans_mu[n])return ans_mu[n];
	ll ans=1;
	for(ll l=2,r;l<=n;l=r+1)
	{
		r=n/(n/l);
		ans-=1LL*(r-l+1)*(Sum_mu(n/l));
	}
	return ans_mu[n]=ans;
}
ll Sum_phi(ll n)
{
	if(n<=N)return phi[n];
	if(ans_phi[n])return ans_phi[n];
	ll ans=(n+1)%p*(n)%p*inv2%p;
	for(ll l=2,r;l<=n;l=r+1)
	{
		r=n/(n/l);
		ans=(ans-(r-l+1)%p*Sum_phi(n/l)%p+p)%p;
	}
	return ans_phi[n]=ans%p;
}
ll Sum_g(ll n)
{
	n%=p;
	return (n)%p*(n+1)%p*(2*n+1)%p*inv6%p;
}
ll Sum_Ned(ll n)
{
	if(n<=N)return Ned[n];
	if(ans_Ned[n])return ans_Ned[n]%p;
	ll Can=n%p;
	ll ans=(Can+1)*Can/2%p;
	ans=ans*ans%p;
	for(ll l=2,r;l<=n;l=r+1)
	{
		r=(n/(n/l));
		ans=(ans+p-((Sum_g(r)-Sum_g(l-1)+p)%p)*(Sum_Ned(n/l))%p)%p;
	}
	return ans_Ned[n]=ans%p;
}
void init()
{
	mu[1]=phi[1]=1;//先用筛法算出较小的部分
	for(ll i=2;i<=N;i++)
	{
		if(vis[i]==0)prim[++cnt]=i,mu[i]=-1,phi[i]=i-1;
		for(ll j=1;j<=cnt&&prim[j]*i<=N;j++)
		{
			vis[prim[j]*i]=1;
			if(i%prim[j]==0)
			{
				phi[i*prim[j]]=phi[i]*prim[j];
				mu[i*prim[j]]=0;
				break;
			}
			phi[i*prim[j]]=phi[i]*phi[prim[j]];
			mu[i*prim[j]]=mu[i]*mu[prim[j]];
		}
	}
	for(ll i=1;i<=N;i++)Ned[i]=phi[i]%p*i%p*i%p;
	for(ll i=1;i<=N;i++)mu[i]+=mu[i-1],phi[i]=(phi[i]+phi[i-1])%p,Ned[i]=(Ned[i]+Ned[i-1])%p;
}
int main()
{
	p=read(),n=read();
	inv2=ksm(2,p-2)%p;
	inv6=ksm(6,p-2)%p;
	init();
	ll ans=0;
	for(ll l=1,r;l<=n;l=r+1)
	{
		r=n/(n/l);
		ll Can=(n/l)%p;
		ans+=((Can+1)*(Can)%p*inv2%p)*((Can+1)*(Can)%p*inv2%p)%p*((Sum_Ned(r)-Sum_Ned(l-1)+p)%p)%p;
		// ans=(ans+((Can+1)*(Can)/2%p)*((Can+1)*(Can)/2%p)%p*((Sum_Ned(r)-Sum_Ned(l-1)+p)%p)%p)%p;
		ans=ans%p;
		// cout<<l<<endl;
	}
	cout<<ans<<endl;
	return 0;
}

3个取模,硬控三天。
我草,这个真的是只能静态查,真的离谱。

标签:lfloor,frac,sum,rfloor,mu,数学题,简单,P3768,displaystyle
From: https://www.cnblogs.com/HLZZPawa/p/18426261

相关文章

  • 快速上手SAP BI,数据分析从此简单
     在当今数字化的商业世界中,数据已经成为企业决策的核心依据。而SAPBI(BusinessIntelligence)作为一款强大的商业智能工具,为企业的数据分析提供了高效、全面的解决方案。对于想要深入挖掘数据价值的企业和个人来说,快速上手SAPBI是开启数据分析便捷之旅的关键。 一、SAPBI简介......
  • Chainlit集成LlamaIndex实现知识库高级检索(简单融合寻回器)
    检索原理**简单融合寻回器**简单融合寻回原理,是利用多个检索器,融合查询最终的结果返回给LLM。此检索器还将通过生成与原始问题相关的问题,用相关问题再次检索多个检索器的数据,把原始问题和相关问题经过多个检索器检索结果整理后交给LLM最最终回复。本次代码示例中,使用简......
  • C10-05-3-nussus和awvs简单使用
    一awvs扫描免责声明本文仅是个人对该工具的学习测试过程记录,不具有恶意引导意向。本文工具仅面向合法授权的企业安全建设行为,如您需要测试本工具的可用性,请自行搭建靶机环境。在使用本工具进行检测时,您应确保该行为符合当地的法律法规,并且已经取得了足够的授权。请勿对非......
  • C10-05-2-X-ray简单使用
    一、X-ray主流应用漏洞扫描工具,也支持部分主机扫描功能(社区版+高级版)下载:Github:https://github.com/chaitin/xray/releases(国外)CTstack:https://stack.chaitin.com/tool/detail?id=1(国内)官方文档说明:快速开始-xrayDocumentation首次运行会在同级......
  • 简单部署Memos
    前言:此处以阿里云为例,利用宝塔面板部署此文章是部署之后写的,因此有些截图是后补充的,缺少一些执行结果展示和详细步骤的缺失,请根据实际情况做调整准备购买阿里云服务器ECS着手创建实例进入阿里云控制台,我的资源→云服务器ECS;点击进入实例,此处有实例则不用管,没有则选......
  • 再见了 Elasticsearch!新开源自带UI,更简单更兼容,这款工具牛逼了!(带私活源码)
     今天给大家分享的是一款基于全文搜索的搜索引擎---ZincSearch!对于 Elasticsearch 用过的人都很熟悉了,主要做文本搜索,而且响应速度在毫秒级,应用场景非常广泛。比如:全文搜索、日志分析、运维监控、安全分析和电商搜索等等。既然Elasticsearch这么好用,那为什么会出现Zinc......
  • 出题答的代价——壹伯道数学题的还债
    故事背景本人于\(2024/9/11\)出了名为cynthia的数论题答题,由于题目过于恶心,被伟大的树王hhoppitree要求完成\(100\)道数学题的还债。由于\(100\)道可能下辈子都写不完,于是对每道题根据难度试做\(+1/4/7\)题。题录\(+1\),P9796,算法:数学,构造。——2024/9/12\(+4\)......
  • 【log4j 2.x】【log4j日志升级漏洞修复】log4j2日志 [简单明了][一眼就会]
    大多同学说的不是很全,写的不是很具体。在此,本人出一篇简单明了的详细教程: 目录:1、加载log4j2包2、配置xml文件3、写测试并运行4、log指定文件:自动打印info、error日志5、整体code正文:1、加载log4j2包<dependency><groupId>org.apache.logging.log4j</group......
  • 最新版今日头条独家内部玩法,单号轻松简单日入2张
    今日头条作为流行的新闻和内容平台,为内容创作者提供了一个展示和盈利的机会。本文档详细介绍了利用特定工具在今日头条上进行文章创作的流程和优势。项目背景随着移动互联网的普及,越来越多的用户通过手机应用获取信息。今日头条凭借其算法推荐系统,成为用户获取信息的重......
  • 最新版今日头条独家内部玩法,单号轻松简单日入2张
    今日头条作为流行的新闻和内容平台,为内容创作者提供了一个展示和盈利的机会。本文档详细介绍了利用特定工具在今日头条上进行文章创作的流程和优势。项目背景随着移动互联网的普及,越来越多的用户通过手机应用获取信息。今日头条凭借其算法推荐系统,成为用户获取信息的重......