GCD LCM 素数 快速幂

1.**********  GCD(最大公约数)

 

代码实现(复杂度为O(logn))

 

int gcd ( int a, int b){

    return b ? gcd ( b , a % b ) : a ;

}

 

2.***********   LCM(最小公倍数) 

 

lcm(a,b) = a * b / gcd(a,b);

 

3.********   素数

 

代码实现(复杂度为O(logn))

 

函数isprime返回值中 值为1代表素数,值为0代表非素数

 

int isprime(int a){

    if(a==1) return 0;

    for(int i=2;i<=sqrt(a);i++){

        if(a%i==0) return 0;

    }

    return 1;

}

 

 

4.********素数打表

 

代码实现(复杂度为O(nloglogn))

 

数组nisprime中 值为0代表素数,值为1代表非素数

 

const int MAXN = (int)(打表范围);

int nisprime[MAXN];

void init() {

    nisprime[1] = 1;

    for(int i = 2; i < MAXN; i++) {

        if(!nisprime[i])

            for(long long j = i * i; j < MAXN; j += i) {

                nisprime[j] = 1;

            }

    }

}

 

//判断输入数值i是否为素数,只需判断nisprime[i]的值即可

 

5.********  快速幂

 

代码实现(复杂度为O(logn))

 

#define ll long long

ll poww(ll a,ll b,ll c){

    ll ant=1;

    while(b){

        if(b&1) ant = (ant * a ) % c;

        a=a*a%c;

        b>>=1;

    }

    return ant;

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值