数论学习

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/last_xuanshen/article/details/78637290

数论学习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);}
 } 



阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页