【数学/图形学/特殊公式】

1.gcd求最大公因数

int gcd(int a,int b){ //非递归
    a = abs(a); b = abs(b);
    if(ab 和 abs(a)、abs(b)
    if(b==0) return a;
    return regcd(b,a%b);
}

2.扩展欧几里得

【数学/图形学/特殊公式】_第1张图片

void exgcd(int a,int b,int &d,int &x,int &y){     //ax+by=gcd(a,b)=d
    if(!b){  
        d = a, x = 1, y = 0;  //递归到0开始反推
    }  
    else{  
    exgcd(b, a % b, d, y, x);  
        y -= x * (a / b); 
    }
}

3.素筛法

int vis[MAXN],prime[MAXN],cnt;
void sceen(int sz){     
    for(int i=2;i<=sz;i++)
        if(!vis[i]){
            prime[cnt++] = i;
            for(int j=i*i;j<=sz;j+=i)
                vis[j] = 1;
        }
}

    3.* 质因数分解(先用素筛法)

int fac[MAXN];
int facsize;
void primeFactorization(int n){
	while(1){
		if(n

4.高精度乘法+快速幂 例子

void mul(char a[],char b[],char c[]){
	int x[MN],y[MN],z[MN];
	int lena = strlen(a);
	int lenb = strlen(b);
	memset(z,0,sizeof(z));
	for(int i=0;i0){
		if(n%2){
			mul(c,a,c);  
		}
		mul(a,a,a);
		n = n>>1;// "= >>" ,not only ">>"!!
	}
}



你可能感兴趣的:(刷题记录)