儿童节礼物:数学相关整合包,内含扩展欧几里得、逆元、阶乘、组合数、约数个数&约数和(前缀),核心部分仅售46行代码,限时放送80亿份
#include <bits/stdc++.h>
#define N 10005
using namespace std;
typedef long long ll;
ll T, n, m, p;
struct res{
ll x, y;
};
res exgcd(ll a, ll b, ll n){
if(b == 0) return res{n / a, 0};
ll px = exgcd(b, a % b, n).x, py = exgcd(b, a % b, n).y;
ll x = py, y = px - a / b * py;
return res{x, y};
}
ll inverse(ll a, ll MOD){
ll g = __gcd(a, MOD);
if(g == 1) return (exgcd(a, MOD, 1).x % MOD + MOD) % MOD;
return 0;
}
ll jc(ll n, ll p){
ll ans = 1;
for(ll i = 1; i <= n; i++){
ans = ans * i % p;
}
return ans;
}
ll Cnm(ll n, ll m, ll p){
return (jc(n, p) * inverse(jc(m, p), p) * inverse(jc(n - m, p), p)) % p;
}
ll ysnum(ll n){
ll k = n;
ll ans = 0;
for(int l = 1, r; l <= n; l = r + 1){
ll val = k / l;
if(val) r = min(k / val, n);
else r = n;
ans = ans + val * (r - l + 1);
}
return ans;
}
ll yssum(ll n){
ll k = n;
ll ans = 0;
for(int l = 1, r; l <= n; l = r + 1){
ll val = k / l;
if(val) r = min(k / val, n);
else r = n;
ans = ans + val * (l + r) * (r - l + 1) / 2;
}
return ans;
}
int main(){
return 0;
}