数论基本知识

( ) 本文主要来自博主高中时数竞相关积累与网上相关资料(更新中)

欧拉函数

: n n , φ ( 1 ) = 1 欧拉函数:小于n的正整数中与n互质的数的数目,\varphi(1)=1 ,通式: φ ( x ) = x i = 1 n ( 1 1 p i ) \varphi(x)=x\displaystyle\prod^n_{i=1}\left(1-\frac{1}{p_i}\right)
x = p 1 a 1 p n a n x x=p_1^{a_1}\cdots p_n^{a_n}为x的标准分解

性质:

  1. n , φ ( n ) = n 1 若n是素数 , 有\varphi(n)=n−1
  2. n > 2 , φ ( n ) n>2,\varphi(n)是偶数
  3. a n a , φ ( n a ) = φ ( n ) ( a 1 ) 若a是素数且n不是a倍数 , 有\varphi(n∗a)=\varphi(n)*(a−1)
  4. a n   m o d   a = 0 , φ ( n a ) = φ ( n ) a 若a是素数且n\ mod\ a=0 , 有\varphi(n∗a)=\varphi(n)∗a
  5. g c d ( n , m ) = 1 , φ ( m n ) = φ ( m ) φ ( n ) 若gcd(n,m)=1 , 有\varphi(m∗n)=\varphi(m)∗\varphi(n)
  6. n , φ ( 2 n ) = φ ( n ) 若n是奇数 , 有\varphi(2∗n)=\varphi(n)
  7. n m , φ ( n m ) = n m 1 若n和m是素数 , 有\varphi(n∗m)=n∗m−1
  8. p , φ ( p q ) = p q p q 1 若p是素数 , 有\varphi(p^q)=p^q−p^{q−1}
  9. d m φ ( d ) = m d m \displaystyle\sum_{d|m}\varphi(d)=m\quad d为m的所有正约数
#include <cstring>
#define ll long long
const int MAX_N = 1e6 + 5;
ll phi[MAX_N];
bool isprime[MAX_N];
//欧拉筛法
void Euler()
{
	for(int i = 0; i < MAX_N; ++i) phi[i] = i;
	memset(isprime, true, sizeof(isprime));
	isprime[0] = isprime[1] = false;
	phi[1] = 1;
	for (int i = 2;i <= MAX_N; ++i){
		if (isprime[i])
			for (int j = i; j <= MAX_N; j += i){
				isprime[j] = false;
				phi[j] -= phi[j] / i;
			}
	}
}

void Euler()
{
	for (int i = 1; i < MAX_N; ++i) phi[i] = i;
	for (int i = 2; i < MAX_N; ++i)
		if (phi[i] == i)
			for (int j = i; j < MAX_N; j+=i)
				phi[j] = (i - 1) * phi[j] / i;
}
//单个欧拉函数值
ll phi(ll n)
{  
	int ans = n;  
	for (int i = 2; i * i <= x; ++i) {
		if (x % i == 0) { 
			ans -= ans / i; 
			while (x % i == 0) x /= i; 
		} 
	}
	if (x > 1) ans -= ans / x; 
	return ans;  
} 

著名数论定理

欧拉定理

g c d ( a , m ) = 1 , a φ ( m ) 1 ( m o d   m ) 设gcd(a,m)=1,则a^{\varphi(m)}\equiv1(mod\ m)

费马小定理

p , p a , a p 1 1 ( m o d   p ) 设p是素数,p\nmid a,则a^{p-1}\equiv1(mod\ p)

威尔逊定理

p , ( p 1 ) ! 1 ( m o d   p ) 设p是素数,则\left(p-1\right)!\equiv-1(mod\ p)

中国剩余定理

m i , { x r 1 ( m o d   m 1 ) x r 2 ( m o d   m 2 ) x r n ( m o d   m n ) x i = 1 n r i M i M i , M = i = 1 n m i , M i = M m i , M i = M i 1   ( m o d   m i ) 对于两两互质的m_i,同余方程组\begin{cases} x\equiv r_1\quad(mod\ m_1)\\ x\equiv r_2\quad(mod\ m_2)\\ \vdots\\ x\equiv r_n\quad(mod\ m_n) \end{cases}的解为\\ x\equiv\sum_{i=1}^nr_iM_iM_i^`,其中M=\prod_{i=1}^nm_i,M_i=\frac{M}{m_i},M_i^`=M_i^{-1}\ (mod\ m_i)

同余

  • g c d ( a , b ) = g c d ( a , b a ) = g c d ( a , b   m o d   a ) gcd(a,b)=gcd(a,b-a)=gcd(a,b\ mod\ a)
  • a b = g c d ( a , b ) l c m ( a , b ) a\cdot b=gcd(a,b)\cdot lcm(a,b)
  • : 扩展欧几里得算法:

素数

  • ( ) 素数筛(粗略)
#include <cstdio>  
#include <cstring>
#define ll long long
const int MAX_N = 1e5;//求MAX_N范围内的素数  
ll prime[MAX_N], cnt;  
bool isprime[MAX_N];

void sieve()  
{  
	cnt = 1;
	memset(isprime, true, sizeof(isprime));
	isprime[0] = isprime[1] = false;  
	for (ll i = 2;i <= MAX_N; ++i) {  
		if (isprime[i]) {
			prime[cnt++] = i;
			for (ll j = 2 * i; j <= MAX_N; j += i)
				isprime[j] = false;
		}
	}  
}

int main()  
{
	sieve();
	for (ll i = 1; i < cnt; ++i)
		printf("%15d", prime[i]);
	return 0;  
}

  • 线 线性筛
const int MAX_N = 1e5;
int prime[MAX_N], cnt;
bool check[MAX_N];

void sieve(){
	for (int i = 2;i <= MAX_N; ++i){
		if(!check[i]) prime[++cnt] = i;
		for (int j = 1; j <= cnt && prime[j] * i <= MAX_N; ++j) {
			check[prime[j] * i] = true;
			if(i % prime[j] == 0) break; //重点
		}
	}
}

数论计数问题

  • : n n = p 1 a 1 p n a n , n i = 1 n ( a i + 1 ) 约数:对n的标准分解式n=p_1^{a_1}\cdots p_n^{a_n},n的正约数个数为\displaystyle\prod_{i=1}^n(a_i+1)
  • n ! p ( n ! ) = m = 1 [ n p m ] 勒让德定理:在正数n!的素因子标准分解式中,素数p的最高指数为(n!)=\displaystyle\sum_{m=1}^\infty\left[\frac{n}{p^m}\right]
    C n k   m o d   p 根据勒让德定理计算C_n^k\ mod\ p

猜你喜欢

转载自blog.csdn.net/AbelYang1/article/details/86589779