快速幂取模 求(a^b)%c
int q_mod(int a,int b,int c){
int ans=1;
a=a%c; //先求余,缩短运算规模。(有时候不用)
while(b){
if(b&1)
ans=(ans*a)%c;
b>>=1;
a=(a*a)%c;
}
return ans;
}
GCD(最大公约数)1.c语言基础型 int gcd(int a,int b){int n;while(b){n=a%b;a=b;b=n;}return a;} 2.递归实现int gcd(int a,int b){return (b>0)?gcd(b,a%b):a;}
或者
int gcd(int a,int b){
return b==0?a:gcd(b,a%b);
}3.位运算实现int gcd(int a,int b){while(b^=a^=b^=a%=b);return a;}
LCM(最小公倍数)
ll lcm(ll a,ll b)
{
return a/gcd(a,b)*b;
}
素筛 a[0]=a[1]=1; 真值非素数 for(i=2;i*i<max;i++){ if(!a[i]) for(j=i+i;j<max;j+=i){ a[j]=1; } }
素数判定 int prime(int a){ if(a==0||a==1) return 0; if(a==2) return 1; int n=sqrt(a); for(int i=2;i<=n;i++){ if(a%i==0) return 0; return 1; } }