快速枚举一个数的二进制1的个数
int n = 5;
int res = 0;
while(n > 0) {
res += n&1;
n = n>>1;
}
线性筛质数
static void getPrime(int n){
for(int i = 2; i <= n; i++){
if(!st[i]) prime[cnt++] = i;
for(int j = 0; prime[j] <= n/i; j++){
st[i * prime[j]] = true;//用最小质因子去筛合数
if(i % prime[j] == 0) break;//避免重复去筛
}
}
}
最大公约数和最小公倍数
static long gcd(long a,long b){//最大公约数
return b == 0 ? a : gcd(b,a%b);
}
static long lcm(long a,long b){//最小公倍数
return a / gcd(a,b) * b;
}