模板
__int128
inline __int128 read() {
__int128 x = 0, f = 1 ;
char ch = getchar() ;
while(ch < '0' || ch > '9')
{
if(ch == '-')
f = -1;
ch = getchar() ;
}
while(ch >= '0'&& ch <= '9')
{
x = x * 10 + ch - '0';
ch = getchar();
}
return x * f;
}
inline void print(__int128 x){
if(x < 0)
{
putchar('-');
x = -x;
}
if(x > 9)
{
print(x / 10);
}
putchar(x%10+'0');
}
快读与快写(输入输出的优化)
inline int read(){
int x = 0, f = 1;
char ch = getchar();
while(ch > '9'||ch < '0')
{
if(ch == '-') f = -1;
ch = getchar();
}
while(ch >= '0'&&ch <= '9')
{
x = (x<<1) + (x<<3) + (ch^48);
ch = getchar();
}
return x*f;
}
inline void print(int x){
char num[200];
int temp = x>0?x:-x;
if(temp < 0) putchar('-');
int cnt = 0;
while(temp > 0)
{
num[cnt++] = temp%10+'0';
temp /= 10;
}
while(cnt > 0) putchar(num[--cnt]);
}
快速幂
typedef long long ll;
ll q_pow(ll a, ll n, ll mod){
ll res = 1;
while(n > 0)
{
if(n&1) res = res * a % mod;
a = a * a % mod;
n >>= 1;
}
return res;
}
埃氏筛
int getprime(int n) {
int prime[N];
bool is_prime[N];
for(int i = 0; i <= n; i++) is_prime[i] = true;
is_prime[0]=is_prime[1]=false;
int cnt;
for(int i = 2; i <= n; i++)
{
if(is_prime[i])
{
prime[++cnt] = i;
for(int j = 2*i; j <= n; j += i) is_prime[j] = false;
}
}
return cnt;
}
欧拉筛(线性筛)
int prime[N];
bool is_prime[N];
void getprime(int n) {
int cnt = 0;
for(int i = 0; i <= n; i++) is_prime[i]=true;
is_prime[0]=is_prime[1]=false;
for(int i = 2; i <= n; i++)
{
if(is_prime[i]) prime[++cnt] = i;
for(int j = 1; j<=cnt&&i*prime[j]<=n; j++)
{
is_prime[i*prime[j]] = false;
if(i%prime[j] == 0) break;
}
}
}
并查集
void makeset() {
for(int i = 1; i <= n; i++)
fa[i] = i;
}
int find(int x) {
return fa[x]==x?x:fa[x]=find(fa[x]);
}
void unionset(int a, int b) {
int a = find(a),b = find(b);
if(a == b) return ;
else fa[b] = a;
}
struct UnionFind{
std::vector<int> f, siz;
UnionFind(int n){
f.resize(n);
siz.assign(n, 1);
std::iota(f.begin(),f.end(), 0);
}
int find(int x){
while(x != f[x]){
x = f[x] = f[f[x]];
}
return x;
}
bool same(int x, int y){
return find(x)==find(y);
}
bool Union(int x, int y){
x = find(x);
y = find(y);
if(x == y) return false;
siz[x] += siz[y];
f[y] = x;
return true;
}
int size(int x) {
return siz[find(x)];
}
};
筛法求欧拉函数
struct Eulers{
int p[N], phi[N], cnt = 0; bool vis[N];
void get(int n) {
vis[1] = 1; phi[1] = 1;
for(int i = 2; i <= n; i++) {
if(!vis[i]) {
p[cnt++] = i;
phi[i] = i - 1;
}
for(int j = 0; p[j] <= n / i; j++) {
vis[i * p[j]] = 1;
if(i % p[j] == 0) {
phi[i * p[j]] = phi[i] * p[j];
break;
}
phi[i * p[j]] = phi[i] * (p[j] - 1);
}
}
}
}eu;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现