首页 > 其他分享 >数论指南

数论指南

时间:2024-09-19 17:28:08浏览次数:6  
标签:指南 lfloor frac 数论 sum rfloor times bmod

同余定理

同余性质

同余性质是指在任意情况下,都有:

  • $n\times m\bmod p$=$(n\bmod p)\times(m\bmod p)\bmod p$
  • $n+m\bmod p$=$(n\bmod p)+(m\bmod p)\bmod p$
  • $n-m\bmod p$=$(n\bmod p)-(m\bmod p)\bmod p$

除法不满足同余性质。

欧拉定理

欧拉函数:$\varphi(n)$ 表示在 $1$ 和 $n$ 之间与 $n$ 互质的个数,即 $\sum_{i=1}^{n}[\gcd(i,n)=1]$。

欧拉定理:如果 $\gcd(n,p)=1$,则有 $n^p\equiv1\pmod p$。

乘法逆元

乘法逆元指如果 $a\times b\equiv1\pmod p$,则称 $b$ 为 $a$ 的 $p$ 意义下逆元。

快速幂求逆元

因为 $a\times b\equiv1\pmod p$,则有 $a\times b\equiv a^{p-1}\pmod p$,同时除以 $a$,则有 $b\equiv a^{p-2}\pmod p$,所以可以用快速幂求逆元。

递推求逆元

令 $div=\lfloor\frac{i}{p}\rfloor$,$mod=i\mod p$,则有:
$$div\times i+mod\equiv 0\pmod p$$
同时转为逆元,则:
$$div^{-1}\times i{-1}+mod\equiv 0\pmod p$$
$$i^{-1}\equiv div^{-1}\times mod^{-1}\pmod p$$
$$i^{-1}\equiv div=\lfloor\frac{i}{p}\rfloor^{-1}\times(i\bmod p)^{-1}\pmod p$$
就可以递推求了。

ll inv[MAXN];
inline void prework(ll mod){
	inv[1]=1;//初始值
	for(int i=2;i<MAXN;++i){
		inv[i]=(mod-mod/i)*inv[mod%i]%mod;//递推式 
	} 
}

gcd 定理

exgcd

$$a\times x_1+b\times y_1=\gcd(a,b)$$
$$b\times x_2+(a\bmod b)\times y_2=\gcd(a,a\bmod b)$$
之后不断往下递归就可以了。

ll exgcd(ll a,ll b,ll &x,ll &y){
	if(!b){
		x=1;
		y=0;//肯定有这么一组 
		return a;
	}
	ll d=exgcd(b,a%b,x,y);//公式 
	x=y;
	y=d-(a/b)*y;//公式 
	return d;
}

裴蜀定理

裴蜀定理指如果要满足 $ax+by=c$,则需要满足 $\gcd(a,b)\mid c$。没什么特别好讲的,主要主语结论。

积性函数

欧拉函数

欧拉函数上面讲到过,其实可以拆解成:$\Pi_{p\in Prime,p\mid n}(p-1)$,所以,可以用欧拉筛筛出来。

莫比乌斯函数

莫比乌斯函数的定义是这样的:
$$\mu(n)=\begin{cases}
1&n\in Prime\
0&p^2\mid n,p\in Prime\
(-1)k&n=\Pi_{i=1}p_i^{c_i},p_i\in Prime
\end{cases}$$
这也是积性函数,所以可以用欧拉筛筛出来。

莫比乌斯反演

有一个性质,$\sum_{d\mid n}\mu(d)=[n=1]$,所以,这可以将形如:
$$F(n)=\sum_{d\mid n}f(\lfloor\frac{n}{d}\rfloor)$$
$$f(n)=\sum_{d\mid n}\mu(d)\times F(\lfloor\frac{n}{d}\rfloor)$$
还可以将形如:
$$[\gcd(a_1,a_2,a_3\dots a_n)=1]$$
变成:
$$\sum_{d\mid a_1,d\mid a_2,d\mid a_3\dots d\mid a_n}\mu(d)$$

例题

基于上面的反演公式,可以转化为:
$$\sum_{d=1}{n}\sum_{t=1}\rfloor}\mu(t)\sum_{i=1}^{\lfloor\frac{n}{d\times t}\rfloor}\varphi(i)\sum_{j=1}^{\lfloor\frac{m}{d\times t}\rfloor}\varphi(j)$$
之后掏出一个 $G(n)=\sum_{i=1}^{n}\varphi(i)$,有:
$$\sum_{d=1}{n}\sum_{t=1}\rfloor}\mu(t)\times G(\lfloor\frac{n}{d\times t}\rfloor)\times G(\lfloor\frac{m}{d\times t}\rfloor)$$
再掏出一个 $H(n,m,t)=\sum_{i=1}^{t}\mu(t)\times G(\lfloor\frac{n}{i}\rfloor)\times G(\lfloor\frac{m}{i}\rfloor)$。
$$\sum_{d=1}^{n}H(\lfloor\frac{n}{d}\rfloor,\lfloor\frac{m}{d}\rfloor,\lfloor\frac{t}{d}\rfloor)$$
之后预处理加上数论分块优化就可以了。

#include<bits/stdc++.h>
#define MAXN 50005
#define MAXM 55
#define MOD 23333
using namespace std;
int t,n,m;
int phi[MAXN],mob[MAXN];
vector<int> prim,G[MAXN],S[MAXM][MAXM];
bool flag[MAXN];
inline void prework(){
	flag[1]=phi[1]=mob[1]=1;
	for(int i=2;i<MAXN;++i){
		if(!flag[i]){
			prim.push_back(i);
			phi[i]=i-1;
			mob[i]=-1;
		}
		for(int j=0;j<prim.size()&&i*prim[j]<MAXN;++j){
			flag[i*prim[j]]=true;
			if(i%prim[j]){
				phi[i*prim[j]]=phi[i]*(prim[j]-1)%MOD;
				mob[i*prim[j]]=-mob[i];
			}else{
				phi[i*prim[j]]=phi[i]*prim[j]%MOD;
				break;
			}
		}
	}
	for(int i=1;i<MAXN;++i){
		G[i].push_back(0);
		for(int j=1;i*j<MAXN;++j){
			G[i].push_back((G[i].back()+phi[i*j])%MOD);
		}
	}
	for(int i=1;i<MAXM;++i){
		for(int j=1;j<MAXM;++j){
			S[i][j].resize(MAXN/max(i,j)+1);
			for(int d=1;d*max(i,j)<MAXN;++d){
				for(int k=1;k*d*max(i,j)<MAXN;++k){
					(S[i][j][k*d]+=G[d][i]*G[d][j]%MOD*mob[d]%MOD)%=MOD;
				}
			}
			for(int k=1;k*max(i,j)<MAXN;++k){
				(S[i][j][k]+=S[i][j][k-1])%=MOD;
			}
		}	
	}
}
inline int blocked(){
	int ans=0,lim=m/MAXM;
	for(int i=1;i<=lim;++i){
		for(int j=1;i*j<=lim;++j){
			(ans+=1ll*mob[i]*G[i][n/i/j]%MOD*G[i][m/i/j]%MOD)%=MOD;
		}	
	}
	for(int l=lim+1,r;l<=n;l=r+1){
		r=min(n/(n/l),m/(m/l));
		(ans+=((S[n/l][m/l][r]-S[n/l][m/l][l-1])%MOD+MOD)%MOD)%=MOD;
	}
	return ans;
}
int main(){
	prework();
	int t;
	scanf("%d",&t);
	while(t--){
		scanf("%d %d",&n,&m);
		if(n>m){
			swap(n,m);
		}
		printf("%d\n",blocked());
	} 
	return 0;
}

组合计数

卡特兰数

卡特兰数是指从 $n$ 个元素中选 $m$ 个数的方案,具体可以用证明法。

  • 设 $A_{n}^{m}$ 为从 $n$ 个里面选取 $m$ 个数,包含顺序不同的情况,为 $\frac{!n}{!(n-m)}$
  • 那么不包含顺序的 $C_{n}^{m}$ 为 $\frac{A_nm}{A_m1}$,是 $\frac{!n}{!(n-m)\times !m}$。
  • 下面两项再取模的时候可以乘以逆元。

容斥原理

容斥是指去除重复的情况。例如要求 $|S1\cap S2|$,则可以用 $|S1|+|S2|-|S1\cup S2|$。这个就是容斥原理。

例题

这一道题目考虑正难则反。首先令 $ans=\sum c_i\times d_i$,减去不合法的情况。

首先,我们把它当成一个完全背包,处理出来一个 dp 数组存储方案数,转移方程为 $dp_i\to dp_i+dp_{i-v_i}$。

考虑减去不合法的情况为更多的硬币,所以就是 $ans\to ans-dp_{V-d_i-1}\times c_i$。

#include<bits/stdc++.h>
#define MAXN 100001
using namespace std;
typedef long long ll;
ll dp[MAXN];
int main(){
	int c[5],test;
	scanf("%lld %lld %lld %lld %lld",&c[1],&c[2],&c[3],&c[4],&test);
	dp[0]=1;
	for(int i=1;i<=4;++i){
		for(int j=c[i];j<MAXN;++j){
			dp[j]+=dp[j-c[i]];
		}
	}
	while(test--){
		int d[5],sum,ans=0;
		scanf("%lld %lld %lld %lld %lld",&d[1],&d[2],&d[3],&d[4],&sum);
		for(int i=0;i<=15;++i){
			int cnt=sum,val=1;
			for(int j=1;j<=4;++j){
				if((i>>(j-1))&1){
					cnt-=c[j]*(d[j]+1);
					val*=-1;
				}
			}
			if(cnt<0){
				continue;
			}
			ans+=val*dp[cnt];
		}
		printf("%lld\n",ans);
	}
	return 0;
}

标签:指南,lfloor,frac,数论,sum,rfloor,times,bmod
From: https://www.cnblogs.com/hisy/p/18421000

相关文章

  • 南大通用GBase 8s HAC集群搭建部署指南(下)
    在上篇文章中,我们完成了GBase8sHAC集群搭建的初步配置。本文将重点介绍如何配置主节点和辅节点之间的互信关系,以及如何搭建并验证HAC集群的状态。1、配置互信互信是集群节点间通信的基础。我们可以通过配置.rhosts文件或使用REMOTE_SERVER_CFG参数两种方式来实现互信。根据企业的......
  • 相亲交易系统源码详解与开发指南
    随着互联网技术的发展,越来越多的传统行业开始寻求线上转型,其中就包括婚恋服务。传统的相亲方式已经不能满足现代人快节奏的生活需求,因此,开发一款基于Web的相亲交易系统显得尤为重要。本文将详细介绍如何使用PHP语言构建一个高效、安全的相亲交易系统,并提供部分源代码示例。技术选型......
  • 大人时代变了,ChatGPT使用指南(喂嘴里)
    目录一、面向软件开发人员的ChatGPT提示词二、AI能力对比和推荐三、AI能做什么国外ChatGPT的大模型工具使用对于国内大部分人来说仍然有比较大的门槛,比如网络访问限制问题,账户注册限制,账户封号等问题。那么在国内,有没有一些可替代工具呢?这篇文章就给大家分享一些高效的......
  • ObjectiveRecord 项目使用指南
    ObjectiveRecord项目使用指南简介ObjectiveRecord是一个基于ActiveRecord模式的Objective-C库,旨在简化iOS和macOS应用程序中的数据库操作。它提供了一种简洁的方式来处理CoreData,使得开发者可以更高效地进行数据持久化操作。ObjectiveRecord的设计灵感来自于Rubyon......
  • 预约问诊APP开发指南:基于互联网医院系统源码的实践方案
    本篇文章,小编将深入探讨如何基于互联网医院系统源码开发预约问诊APP,帮助开发者更好地理解实践中的关键环节与技术方案。 一、互联网医院系统源码的核心功能在开发预约问诊APP之前,理解互联网医院系统源码的核心功能是第一步。通常,成熟的互联网医院系统源码包含以下几个模块:-用户管......
  • LLMChat入门指南 - 基于Flutter和FastAPI的大语言模型聊天应用
    LLMChat-您的AI聊天助手......
  • 《DNK210使用指南 -CanMV版 V1.0》第二十五章 LCD图片显示实验
    第二十五章LCD图片显示实验1)实验平台:正点原子DNK210开发板2)章节摘自【正点原子】DNK210使用指南-CanMV版V1.03)购买链接:https://detail.tmall.com/item.htm?&id=7828013987504)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/k210/ATK-DNK210.html5)正......
  • 搜索指南
    dfs和bfsdfsdfs,是英文名deep-first-search的缩写,它的思想是一搜到底,撞墙回头。这一种思想是基于递归和栈实现的,打个比方,你在迷宫里面,发现有岔路口,先向左走,走了一段时间发现是死路,退回去之后走右边。基于dfs,有一种术语叫做:回溯。回溯的思想是如果要走这一条路,那么就踩上去......
  • 动态规划指南
    线性dp线性dp,就是指dp只有一维的dp。因此,线性dp容易由$\operatorname{O}(n)$的式子推出来。有时候,线性dp是需要结合其他的方法优化或者证明的。例题这一道题目可以很明显地推出式子,设$dp_i$为以$i$结尾的子序列最大长度。$$\Largedp_i=\max_{j=1}^{i-1}(dp_j[......
  • 国产数据库VastBase适配指南
     背景  目前数据库市场上,仍然是甲骨文、IBM为代表的国外数据库软件处于主导地位,国产化的数据库的使用率,与推广面很有限。相对于主流数据库而言,国产数据库的优势并不明显,还有相当远的距离。那么我们为什么要用国产数据库呢?因为数据安全。相对于其它新特性而言,安全尤为重要。数......