Basic
数据范围¶
类型 | 大小 | 十进制最小值 | 二进制最小值 | 十进制最大值 | 二进制最大值 |
---|---|---|---|---|---|
short | 2 bytes | -32768=-3\times 10^5 | -2^{15} | 32767=3\times 10^5 | 2^{15}-1 |
unsigned short | 2 bytes | 0 | 0 | 65535=6\times 10^5 | 2^{16}-1 |
int | 4 bytes | -2147483648=-2\times 10^{9} | -2^{31} | -2147483648=2\times 10^{9} | 2^{31}-1 |
unsigned int | 4 bytes | 0 | 0 | 4294967295=4\times 10^9 | 2^{32}-1 |
long long | 8 bytes | -9223372036854775808=-9\times 10^{18} | -2^{63} | 9223372036854775807=9\times 10^{18} | 2^{63}-1 |
unsigned long long | 8 bytes | 0 | 0 | 18446744073709551615=1.8\times 10^{19} | 2^{64}-1 |
long
取决于系统,32位系统下是4字节,64位下则为8字节
IOS不关联stdio¶
ios::sync_with_stdio(false);
费马小定律¶
假如a是一个整数,p是一个质数,那么a^p-a是p的倍数,可以表示为
a^p \equiv a (mod p)
进一步,只要a不是质数p的倍数,就有
a^{p-1}\equiv 1 (mod p)
因此
\frac{a}{b}\equiv \frac{a}{b}\times b^{p-1}\equiv a\times b^{p-2} (modp)
因此在取模过程中,如果要除以某个数,应该乘这个数的MOD-2次方
string哈希¶
using ull = unsigned long long;
const ull SEED = 13331;
ull getHash(const string& s) {
unsigned long long ret = 0;
for (char c : s)
ret = SEED * ret + (int)c;
return ret;
}