数论学习

来源:互联网 发布:伊藤润二坏小孩 知乎 编辑:程序博客网 时间:2024/06/08 19:48

数论学习1

素数筛选

#include<cstdio>const int N = 100000 + 5;bool prime[N];//prime[i]表示i是不是质数 int p[N], tot;//p[N]用来存质数 void init(){    for(int i = 2; i < N; i ++) prime[i] = true;//初始化为质数     for(int i = 2; i < N; i++){        if(prime[i]) p[tot ++] = i;//把质数存起来         for(int j = 0; j < tot && i * p[j] < N; j++){            prime[i * p[j]] = false;            if(i % p[j] == 0) break;//保证每个合数被它最小的质因数筛去         }    }    }int main(){    init();}

数论学习2

快速幂

LL mul(LL a, LL b, LL p){//快速乘,计算a*b%p     LL ret = 0;    while(b){        if(b & 1) ret = (ret + a) % p;        a = (a + a) % p;        b >>= 1;    }    return ret;

拓展欧几里得

 void ex_gcd(LL a, LL b, LL &d, LL &x, LL &y){     if(!b){d = a; x = 1; y = 0;}     else{ex_gcd(b, a%b, d, y, x); y -= x*(a/b);} } 



原创粉丝点击