杂七杂八的数论

杂七杂八的数论

1.定义\(F\)为斐波那契数列,如果\(F_i\)能被\(k\)整除,那么对于每一个\(j\),\(F_{i*j}\)也能被\(k\)整除 (CF2033F)

2.斐波那契数列 MOD k,会得到一个周期数列

3.一定存在整数\(x\),\(y\),满足 \(ax+by=\gcd(a,b)\) (裴属定理)

4.抛物线与直线所围成的面积\(S_{AOB}\)为阿基米德三角形\(\triangle ABP\)\(\frac{2}{3}\) (阿基米德三角形)
avatar

5.从0到x所有数的异或满足以下公式
$ XOR(0, x) = \begin{cases} x & \text{if } x \equiv 0 \pmod{4} \ 1 & \text{if } x \equiv 1 \pmod{4} \ x + 1 & \text{if } x \equiv 2 \pmod{4} \ 0 & \text{if } x \equiv 3 \pmod{4} \end{cases}$

6.逆元 给定整数a,满足\(gcd(a,m)=1\),方程\(ax\mod m = 1\),x的所有解是a在模m意义下的逆,记作\(a^{-1}\)
\((a+b)\mod p = (a\mod p + b\mod p) \mod p\)
\((a/b)\mod p = (a\mod p * b^{-1} \mod p) \mod p\)

7.\(\alpha\oplus\beta\leq\alpha+\beta\) 异或相当于不带进位的加法
\(\alpha\oplus\beta\ge\alpha-\beta\) 异或相当于不借位的减法
\(lcm(\alpha,\beta)\ge2\cdot\max(\alpha,\beta)>\alpha\oplus\beta\)

8.中位数定理当一个数组允许对其任意一个元素进行加一或减一操作,
使之最终数组中元素相同,则最小操作次数所对应最终要变成的数就
是这个数组的中位数

n.筛法

#include <bits/stdc++.h>
using namespace std;
const int N = 1e8+10;

int sieve[N];
int prime[N];

/*
埃拉托斯特尼筛法
对于任意一个大于 1 的正整数 n,
那么它的 x 倍就是合数(x > 1)。
利用这个结论,我们可以避免很多次不必要的检测。

如果我们从小到大考虑每个数,
然后同时把当前这个数的所有(比自己大的)倍数记为合数,
那么运行结束的时候没有被标记的数就是素数了。
*/
int Era(int n){
    int k = 0;
    for (int i=2;i*i<=n;i++){
        if (!sieve[i]){
            for (int j=i*i;j<=n;j+=i){
                sieve[j] = 1;
            }
        }
    }
    for (int i=2;i<=n;i++){
        if (!sieve[i]){
            prime[k++] = i;
        }
    }
    return k;
}

/*
欧拉筛法
*/
int Eular(int n){
    int k = 0;
    for (int i=2;i<=n;i++){
        if (!sieve[i]){
            prime[k++] = i;
        }   
        for (int j=0;j<k;j++){
            if (i * prime[j] > n) break;
            sieve[i * prime[j]] = 1;
            if (i % prime[j] == 0) break;
        }
    }
    return k;
}

int main(){
    int n,len1,len2;
    cin >> n;
    len1 = Era(n);
    len2 = Eular(n);
}   

8.快速幂

#include <bits/stdc++.h>
using namespace std;
using LL = long long;
LL qpow(LL a,LL x,LL mod){
    LL res = 1;
    while (x){
        if (x&1) res = res * a % mod;
        a = a * a % mod;
        x >>= 1;
    }
    return res;
}
int main(){
    LL a,x,mod;
    cin >> a >> x >> mod;
    cout << qpow(a,x,mod) << '\n';
}

9.欧几里得算法求GCD

int gcd(int a, int b){
    return b == 0 ? a : gcd(b, a % b);
}
posted @ 2025-02-20 15:52  Foracy  阅读(12)  评论(0)    收藏  举报