头文件

#include <algorithm> //STL通用算法
#include <bitset>//STL位集容器
#include <cctype>
#include <cerrno>
#include <clocale>
#include <cmath>
#include <complex> //复数类
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <deque> //STL双端队列容器
#include <exception> //异常处理类
#include <fstream>
#include <functional>//STL定义运算函数(代替运算符)
#include <limits>
#include <list>//STL线性列表容器
#include <map> //STL 映射容器
#include <iomanip>
#include <ios>//基本输入/输出支持
#include<iosfwd>//输入/输出系统使用的前置声明
#include <iostream>
#include <istream> //基本输入流
#include <ostream> //基本输出流
#include <queue> //STL队列容器
#include <set> //STL 集合容器
#include <sstream>//基于字符串的流
#include <stack> //STL堆栈容器    
#include <stdexcept> //标准异常类
#include <streambuf>//底层输入/输出支持
#include <string>//字符串类
#include <utility> //STL通用模板类
#include <vector>//STL动态数组容器
#include <cwchar>
#include <cwctype>

快读

ll read() 
{  
    char ch;  
    ll a = 0;  
    while((ch = getchar()) == ' ' || ch == '\n');  
    a+=ch-'0';  
    while((ch= getchar()) != ' ' && ch != '\n')  
    {  
        a *= 10;  
        a += ch - '0';  
    }  
    return a;  
}

快速乘

ll qmul(ll a, ll b, ll mod)	//快速乘, 防止爆ll
{
    ll ans = 0;
    while (b > 0)
    {
        if (b & 1)
            ans = (ans + a) % mod;
        a = (a + a) % mod;
        b >>= 1;
    }
    return ans;
}

随机数

std::mt19937 rng(std::chrono::steady_clock::now().time_since_epoch().count());//32位
std::mt19937_64 rng(std::chrono::steady_clock::now().time_since_epoch().count());//64位,要用unsigned long long, 2^64-1

组合数

ll fac[N], invfac[N];
ll qpow(ll base, ll pow)
{
    ll ans = 1;
    while (pow)
    {
        if (pow & 1)
            ans = ans * base % mod;
        pow >>= 1;
        base = base * base % mod;
    }
    return ans;
}
inline ll inv(ll x){
    return qpow(x, mod - 2);
}
void init()//不能忘记init和调N的大小
{
     fac[0] = invfac[0] = 1;
     for(int i = 1; i < N; i ++ ) 
         fac[i] = fac[i - 1] * i % mod;
     invfac[N - 1] = qpow(fac[N - 1], mod - 2);
     for(int i = N - 2; i >= 0; i -- ) 
         invfac[i] = invfac[i + 1] * (1 + i) % mod;
}
ll C(int n, int m)
{
    if (n < 0 || m < 0 || m > n) return 0;
    return fac[n] * invfac[m] % mod * invfac[n - m] % mod;
}

坐标系旋转后点的坐标变换

img

个数数量级

$n$ 以内的素数个数 : $\frac{n}{In \ n}$

令 $d(n)$ 表示 $n$ 的因数个数

  • 对于任意正整数 $n$, 有 $d(n) \leq \sqrt{3n}$

  • 对于 $n > 1260$ ,有 $d(n) < \sqrt{n}$

  • 对于 $10^{18}$ 范围内的数,因数个数最多约为 $10^5$


不积跬步,无以至千里!