六一礼物
  • 板块灌水区
  • 楼主shenyang_chen
  • 当前回复8
  • 已保存回复8
  • 发布时间2024/6/2 15:14
  • 上次更新2024/6/2 16:07:27
查看原帖
六一礼物
518346
shenyang_chen楼主2024/6/2 15:14

儿童节礼物:数学相关整合包,内含扩展欧几里得、逆元、阶乘、组合数、约数个数&约数和(前缀),核心部分仅售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;
}

2024/6/2 15:14
加载中...