跳转至

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-ap的倍数,可以表示为

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;
}