If a number is not an integer, for example, 5.5, then its difference with its integer part will be non-zero.
If it is an integer, then the difference is 0.
int nCr(int n, int r) {
if(n == 0 || r == 0 || n == r)
return 1;
r = min(r, n - r);
int res = 1;
for(int i = 1; i <= r; i++)
res = res * (n - i + 1) / i;
return res;
}
Property of nCr
int getnCr(int n, int r, vector<vector<int>> &savedResult) {
r = min(r, n - r);
if(r == 0)
return 1;
if(r == 1)
return n;
if(savedResult[n][r])
return savedResult[n][r];
return savedResult[n][r] =
(getnCr(n - 1, r, savedResult) + getnCr(n - 1, r - 1, savedResult));
}
Property of nPr
int P(int n, int r) {
long long nPr[n + 1][r + 1];
for(int i = 1; i <= r; i++)
nPr[0][i] = 0;
for(int i = 0; i <= n; i++)
nPr[i][0] = 1;
for(int i = 1; i <= n; i++)
for(int j = 1; j <= r; j++)
nPr[i][j] = (nPr[i - 1][j] + (j * nPr[i - 1][j - 1])) % 1000000007;
return nPr[n][r];
}
Power of two
(n & (n - 1) == 0) ? "Yes" : "No";
Bit Manipulation
Check if bit is set
bool isSet(int num, int posFromRight) {
return num & (1 << (posFromRight - 1));
}
Set a bit
int set(int num, int posFromRight) {
return num | (1 << (posFromRight - 1));
}
Multiply by 2^k
int multiply(int num, int k) {
return num << k; // num * 2 ^ k
}