首页 > 其他分享 >基础数论 整除分块与欧拉函数

基础数论 整除分块与欧拉函数

时间:2024-07-26 19:39:43浏览次数:16  
标签:frac gcd 分块 sum mid varphi times 整除 欧拉

整除分块

例题:

已知 \(f(n) =\sum\limits_{i = 1 }^{n}\left\lfloor\frac{n}{i}\right\rfloor\),给定 \(n\),求 \(f(n)\) 的值。

固然可以 \(O(n)\) 暴力,但显然会\(TLE\)。

计算一下前几项的值之后可以发现\(\left \lfloor \frac{n}{i} \right \rfloor\) 的取值在连续的一段区间内是相同的,那么就可以将其分为若干块分别进行计算。

先让 \(l\) 为区间的左端点,那么这块的值都为 \(k = \left\lfloor\frac{n}{l}\right\rfloor\) , \(r=max(i)=\left\lfloor\frac{n}{k}\right\rfloor\)。将 \(k\) 代入,得到 \(r=\left\lfloor\frac{n}{\left\lfloor\frac{n}{l}\right\rfloor}\right\rfloor\)。这样每一块的左右端点都能用确定的式子得到了。这样分块的值就为单值 $\times $ 区间长度,即 \(k\times (r-l+1)\) 。

 

模板:

代码
ll division_block(ll n){
	ll res = 0;
    for(ll l = 1, r; l <= n; l = r + 1){
        r = n / (n / l);
        res += n / l * (r - l + 1);
    }
    return res;
}

 

欧拉函数:

定义:

欧拉函数是指 \(1 \sim N\)​ 中与 \(N\)​ 互质的数的个数,记为 \(\varphi(N)\)​。

\[\varphi(x)=\sum_{i=1}^x[{\rm gcd}(i,x)==1] \]

特别的 \(\varphi(1)=1\)​

 

性质:

1.若 \(x\)​ 为质数, \(\varphi(x)=x-1\)。

质数除了他本身都与他互质。

2.\(\forall n>1,1\sim n\) 中与 \(n\) 互质的数的和为 \(n\times \varphi(n)/2\) 。

因为 \({\rm gcd}(n,x)=={\rm gcd}(n,n-x)\) ,所以与 \(x\) 不互质的数 \(x,n-x\) 成对出现,平均值为 \(\frac{n}{2}\) ,所以与 \(n\) 互质的数的平均值也是 \(\frac{n}{2}\) ,而这样的数共有 \(\varphi(n)\) 个,故得性质2。

3.若 \(x=p^k(p为质数)\)​ ,则 \(\varphi(x)=(p-1)\times p^{k-1}\)​。

发现所有 \(p\)​ 的倍数都与 \(x\)​ 不互质,其他数都与 \(x\)​ 互质,而 \(p\)​ 的倍数共有 \(p^{k-1}\)​ 个(包括 \(x\)​ )。

故\(\varphi(x)=p^k-p^{k-1}=(p-1)\times p^{k-1}\)​

4.若 \(p,q\) 互质,则 \(\varphi(p\times q)=\varphi(p)\times \varphi(q)\) ,即欧拉函数为积性函数。

如果 \(a\) 与 \(p\) 互质 \((a<p)\) , \(b\) 与 \(p\) 互质 \((b<q)\) , \(c\) 与 \(pq\) 互质 \((c<pq)\) ,则 \(c\) 与数对 \((a,b)\) 是一一对应的。

符合条件的 \(a\) 有 \(\varphi(p)\) 种, \(b\) 有 \(\varphi(q)\) 种, 则所对应的 \((a,b)\) 数对有 \(\varphi(p)\varphi(q)\) 种。而符合条件的 \(c\) 有 \(\varphi(pq)\) 种。

所以 \(\varphi(pq)=\varphi(p)\times \varphi(q)\)

5.对于一正整数 \(x=p_1^{c_1}\times p_2^{c_2}\times ...\times p_n^{c_n}\) 有

\[\varphi(x)=x\times \prod_{i=1}^{n}(1-\frac{1}{p_i}) \]

证明:

\[\varphi(x)=\prod_{i=1}^n\varphi(p_i^{c_i})=\prod_{i=1}^n(p_i-1)\times p_i^{c_i-1}=\prod_{i=1}^np_i^{k_i}\times(1-\frac{1}{p_i})=x\prod_{i=1}^n(1-\frac{1}{p_i}) \]

6.若 \(p\)​ 为 \(x\)​ 的质因数,则 \(\varphi(x\times p)=\varphi(x)\times p\)

\[\varphi(x\times p)=x\times \prod_{i=1}^n(1-\frac{1}{p_i})\times p=\varphi(x)\times p\\ (p\in [p_i]) \]

7.若质数 \(p\) 不是 \(x\) 的因数,则 \(\varphi(x\times p)=\varphi(x)\times (p-1)\)

\[\varphi(x\times p)=\varphi(x)\times \varphi(p)=\varphi(x)\times(p-1) \]

\[\sum_{d\mid n}\varphi(d)=n \]

设 \(f(n)=\sum_{d\mid n}\varphi(d)\)

\(\therefore f(a\times b)=\sum_{d\mid ab}\varphi(d)\)

\(当{\rm gcd}(a,b)=1时:\) \({\rm gcd}(\forall d_i\mid a,\forall d_i\mid b )=1\)

\(\therefore \sum_{d\mid ab}\varphi(d)=\sum_{d\mid a}\varphi(d)\times \sum_{d\mid b}\varphi(d)\)

​ 即 \(f(a\times b)=f(a)\times f(b)\)​​​​

\(\therefore f(p^m)=\sum_{f\mid p^m}\varphi(d)=\sum_{i=0}^m\varphi(p^i)=1+\sum_{i=0}^{m-1}(p-1)\times p^i(p为质数)\)
\(\ \ \ \ \ \ \ \ \ \ \ \ \ \ =1+(p-1)\times (1+p+\cdots+p^{m-1})\)
\(\ \ \ \ \ \ \ \ \ \ \ \ \ \ =1+(p-1)\times \frac{1-p^m}{1-p}=p^m\)

\(\therefore f(p^m)=p^m\)

\(\therefore f(n)=f(\prod_{i=1}^np_i^{c_i})=\prod_{i=1}^nf(p_i^{c_i})=\prod_{i=1}^np_i^{c_i}=n\)

\(\therefore \sum_{d\mid n}\varphi(d)=n\)

 

代码:

1.求解单个欧拉函数:利用性质 \(5\) ,时间复杂度 \(O(\sqrt n)\) 。

代码
int phi(int n) {
	int ans = n;
	int t = sqrt(n);
	for(int i=2; i<=t; ++i) {
		if(n%i == 0)
			ans = ans/i*(i-1);
		while(n%i == 0) n /= i;
	}
	if(n > 1) ans = ans/n/(n-1);
	return ans;
}

 

  1. 埃氏筛求 \(1\sim n\)的欧拉函数值,时间复杂度 \(O(n \log n)\)
代码
void found_euler(int n) {
	for(int i=1; i<=n; ++i) phi[i] = i;
	for(int i=2; i<=n; ++i) {
		if(phi[i] == i) { // i为质数 
			for(int j=i; j<=n; j+=i) // 给包含质因子i的数字,乘上 (1-1/i) 
				phi[j] = phi[j]/i*(i-1); 
		}
	}
} 

 

3.欧拉筛求 \(1\sim n\) 的欧拉函数值,时间复杂度 \(O(n)\)

代码
int phi[N],pr[N],cnt;
bool vis[N];
void init(){
	int n=1e5+50;
	phi[1]=1; 
	for(int i=2;i<=n;i++){
		if(!vis[i]){pr[++cnt]=i,phi[i]=i-1;}
		for(int j=1;j<=cnt&&pr[j]<=n/i;j++){
			vis[i*pr[j]]=1;
			phi[i*pr[j]]=phi[i]*((i%pr[j])?pr[j]-1:pr[j]); 
			if(i%pr[j]==0)break;
		} 
	}
}

 

GCD SUM

\[\sum_{i=1}^n\sum_{j=1}^n\gcd(i,j) \]

原式可化为

\[\begin{array}{l} =\sum_{i=1}^n\sum_{j=1}^n\sum_{d\mid\gcd(i,j)}\varphi(d)\\ =\sum_{i=1}^n\sum_{j=1}^n\sum_{d=1}^n\varphi(d)[d\mid i][d\mid j]\\ =\sum_{d=1}^n\varphi(d)\sum_{i=1}^n\sum_{j=1}^n[d\mid i][d\mid j]\\ =\sum_{d=1}^n\varphi(d)\lfloor\frac{n}{d}\rfloor^2 \end{array} \]

 

GCD

给定正整数 \(n\) 求 \(1\leq x,y\leq n\&\& \gcd(x,y)\in prime\) 的数对有多少。

\[\begin{array}{l} =\sum_{p\in prime}\sum_{i=1}^n\sum{j=1}^n[gcd(i,j)=p]\\ =\sum_{p\in prime}\sum_{i=1}^{\lfloor\frac{n}{p}\rfloor}\sum{j=1}^{\lfloor\frac{n}{p}\rfloor}[gcd(i,j)=1]\\ =\sum_{p\in prime}(\sum_{i=1}^{\lfloor\frac{n}{p}\rfloor}(2\times\sum{j=1}^i[gcd(i,j)=1])-1)\\ =\sum_{p\in prime}(2\sum_{i=1}^{\lfloor\frac{n}{p}\rfloor}\varphi(i)-1) \end{array} \]

 

Longge 的问题

\[\sum_{i=1}^n\gcd(i,n) \]

\[\begin{array}{l} =\sum_{i=1}^n\gcd(i,n)\\ =\sum_{d\mid n}d\times\sum_{i=1}^n[\gcd(i,n)=d]\\ =\sum_{d\mid n}d\times\sum{i=1}^{\lfloor\frac{n}{d}\rfloor}[\gcd(i,\frac{n}{d})=1]\\ =\sum_{d\mid n}d\times \varphi(\frac{n}{d}) \end{array} \]

by ysx

标签:frac,gcd,分块,sum,mid,varphi,times,整除,欧拉
From: https://www.cnblogs.com/classblog/p/18326124

相关文章

  • 欧拉路径
    欧拉路径定义欧拉路径,指在有向图$G$中,可以从起点$v_1$​开始,经过每条边,则此路径为欧拉路径。欧拉回路,就是在欧拉路径的基础上,限定终点也必须为$v_1$。判定方法欧拉回路,其实就是一笔画问题。而根据我们的小学数学可知,如果一个图可以一笔画,则必须满足以下条件之一:有两个......
  • 分块:优雅的暴力
    分块是一种思想,通过对原数据的适当划分,并在划分后的每一个块上预处理部分信息,从而较一般的暴力算法取得更优的时间复杂度。分块的应用面十分广泛,包括但不限于数组、树形结构等。1.块状数组块状数组是分块思想最简单的应用。它将一个数组分成若干块,然后对数组进行区间操作。对......
  • AcWing873. 欧拉函数
    题目链接:https://www.acwing.com/problem/content/description/875/题目叙述:给定n个正整数ai,请你求出每个数的欧拉函数。欧拉函数的定义:1∼N中与N互质的数的个数被称为欧拉函数,记为ϕ(N)。输入格式第一行包含整数n。接下来n行,每行包含一个正整数ai。输出格式输出共......
  • 分块
    分块数列分块入门4区间修改区间查询区间修改正常。但是区间查询有几个需要注意的点:1.需要取模。(这里对喜欢疯狂取模的人我提个醒:千万不要在bl[l]=...那里取模啊,把块数给模了就完全错了,还有一些不能模的地方一定要看清楚!!!)2.用懒标记算答案的时候一定要乘上r-l+1,别单点......
  • 使用 AES-GCM 分块加密文件
    我想编写一个生成器,以给定大小的块来加密文件并一一返回块。我还想验证有效负载,因此我为此选择了AES-GCM。为什么我要分块加密而不是一次性加密整个文件?我通过网络发送这些块,因此我不是加密整个(可能很大)文件,将其存储在其他地方,然后在进行网络传输时再次对其进行分块,而是加密......
  • 整除分块
    整除分块为什么放在\(9.\)这个板块捏?感觉前面很多地方都会浅浅涉及建议阅读数论函数基础章节,了解基本概念与先要知识又称数论分块,因其解决的问题与整除密切相关而得名,常用于求解形如\[\begin{aligned}\sum_{i=1}^n{f(i)g\left( \left\lfloor \df......
  • 【数学】【模板】欧拉定理
    欧拉定理思想若\(a\)与\(n\)互质,则\(a^{\varphi(n)}\equiv1\pmodn\);容易得出当\(n\)为质数时,\(a^{n-1}\equiv1\pmodn\)。证明假设与\(1\simn\)中与\(n\)互质的数字为\(x_1,x_2,x_3,\cdotsx_{\varphi(n)}\),且两两不同。现将它们全部乘以\(a\)得......
  • 【数学】【模板】欧拉函数
    欧拉函数思想\(\varphi(n)\)表示的是\(1\simn\)中与\(n\)互质的个数。怎么求\(\varphi(n)\)呢?先将\(n\)质因数分解:\(n=p_1^{a_1}p_2^{a_2}\cdotsp_k^{a_k}\),那么\(\varphi(n)=n\left(1-\dfrac{1}{p_1}\right)\left(1-\dfrac{1}{p_2}\right)\cdots\left......
  • 欧拉图、欧拉路径、欧拉回路
    P7771【模板】欧拉路径欧拉路径的模板题。思路首先判断是否有欧拉路径,然后排序,找出起点,最后dfs找路径。代码细节多,比如要判断一个点是否存在(这个题目不需要)。#include<bits/stdc++.h>usingnamespacestd;constintN=100010;vector<int>e[N];inthead[N],in......
  • 欧拉路径
    欧拉路径判定定理及证明有向图欧拉路径:有且仅有一个‘入度=出度+1’的点和一个‘出度=入度+1’的点(起点,终点)或所有点‘入度=出度’欧拉回路:所有点入度=出度(起/终点任意)无向图欧拉路径:有且仅有两个度数为奇数的点(起点,终点)或所有点‘度数均为偶数’欧拉......