等差数列

等比数列

乘法逆元

对于任意整数 而言,如果 互质,存在一个整数 使得

在 模 意义下的乘法逆元 ,记为

不定方程 有解的充要条件是 互质。

费马小定理: 若 是质数,对任意整数 不是 的倍数,有 ,也可以写作

证明: 根据同余的性质, 分别 的结果各不相同。那么:

如何求乘法逆元:若 是质数,则有 ,而 ,所以 意义下的的乘法逆元。

可以用快速幂,时间复杂度为

扩展欧几里得

=

=

​ =

​ = +

,

ll exgcd(ll a,ll b,ll &x,ll &y)
{
	if(b == 0)
	{
	   x = 1;
	   y = 0;
	   return a;
	}
	ll d,x1,y1;
	d = exgcd(b,a%b,x1,y1);
	x = y1;
	y = x1 - a / b * y1;
	return d;
}

( 的 倍数) 答案为 *

通解

证明

递推求逆元

给定 ,求 1~ 在 模 意义下的逆元 , 为 质数

阶乘逆元

给定,求 1~ 每个数阶乘在模 意义下的逆元

算术基本定理

N = ( 为质数)

那么

N 的 约数个数 : (N) = (1 + ) * (1 + ) * (1 + ) * (1 + )

N 的各约数之和 : (N) = (1 + + + ) * (1 + + ** + ) * * (1 + + + ))

N ! 进行算术基本定理的分解

  1. 找到 1~N 中 质数
  2. **每个质数 的指数 : ** + + 直至 N < ,除出结果为0

组合数取模

= **(乘法逆元 取模 m <= n < ) 模为大质数 费马小定理 合数为exgcd **

** = ** + (预处理 递推打标取模 m <= n < 2000)

Lucas 定理 % p = ***** p (n , m < , (质数)p < )

 当 (n,m < p 时 ) return  C(n,m,p) 

= 1;

,并从小到大输出

筛质因子

表示一个数最小的质因子

能够在 线性筛的过程中全部找出来

#include <bits/stdc++.h>
using namespace std;
const int N = 2e6 + 50;
const int P = 10007;
typedef long long ll;
const int M = 2007;    
int n,m,k;
int plist[N];
int mindiv[N * 10];
bool not_prime[N * 10];
void init() {
    int T = 1e7;
    int cnt = 0;
    mindiv[1] = 1;
    for(int i = 2;i <= T; i ++) {
        if(not_prime[i] == false) {
            plist[++ cnt] = i;
            mindiv[i] = i;
        }
        for(int j = 1; j <= cnt; j ++) {
            int x = i * plist[j];
            if(x > T) break;
            not_prime[x] = true;
            mindiv[x] = plist[j];
            if(i % plist[j] == 0) break;
        }
    }
    return;
}
void solve() {
    scanf("%d",&n);
    while(n != 1) {
        int div = mindiv[n];
        if(mindiv[n] == div) {
            printf("%d ", div);
            while(mindiv[n] == div) {
                n /= div;
            }
        }
    }
    printf("\n");
    return;
}
int main() {
    int _ = 1;
    cin >> _;
    init();
    while(_ --) {
        solve();
    }
    return 0;
}