modint

刚刚随便写的,测试中,不建议投入使用

typedef long long ll;
template<int P>
struct Int {
	unsigned x;
	Int(ll _x = 0): x((_x + P) % P) {}
	Int inv() const { return qpow(*this, P - 2); }
	Int &operator += (const Int &t) { x = (x + t.x) % P; return *this; }
	Int &operator -= (const Int &t) { x = (x + P - t.x) % P; return *this; }
	Int &operator *= (const Int &t) { x = 1ll * x * t.x % P; return *this; }
	Int &operator /= (const Int &t) { return (*this) *= t.inv(); }
	friend Int qpow(Int t, ll k) {
		Int res = 1;
		while (k) {
			if (k & 1) {
				res *= t;
			}
			t *= t, k >>= 1;
		}
		return res;
	}
	friend Int operator + (Int a, const Int& b) { return a += b; }
	friend Int operator - (Int a, const Int &b) { return a -= b; }
	friend Int operator * (Int a, const Int &b) { return a *= b; }
	friend Int operator / (Int a, const Int &b) { return a /= b; }
	friend istream &operator >> (istream &is, Int &t) {
		ll _t; is >> _t;
		t = {_t};
		return is;
	}
	friend ostream &operator << (ostream &os, const Int &t) { return os << t.x; }
};
const int P = 998244353;
typedef Int<P> itn;
const int N = 1e6 + 5;
int inv[N];
void get_inv() {
	inv[1] = 1;
	for (int i = 2; i < N; ++i) {
		inv[i] = inv[P % i] * (P - P / i) % P;
	}
}

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蒟蒻一枚

谢谢鸭~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值