12tqian's Competitive Programming Library

This documentation is automatically generated by online-judge-tools/verification-helper

View the Project on GitHub 12tqian/cp-library

:heavy_check_mark: library/modular-arithmetic/mod-operations.hpp

Verified with

Code

#pragma once

namespace ModOperations {

const int MOD = 1e9 + 7;

int mpow(long long b, long long e) {
	long long r = 1;
	while (e) {
		if (e & 1) {
			r *= b; 
			r %= MOD;
		}
		b *= b; 
		b %= MOD;
		e >>= 1;
	}
	return r;
}

int minv(int a) { assert(a); return mpow(a, MOD - 2); }
int add(int a, int b) { a += b; if (a >= MOD) a -= MOD; return a; }
int sub(int a, int b) { a -= b; if (a < 0) a += MOD; return a; }
int mul(int a, int b) { return 1LL * a * b % MOD; }
int divi(int a, int b) { return mul(a, minv(b)); }
int neg(int a) { return a == 0 ? 0 : MOD - a; }
int mod(long long v) { 
	v = int((-MOD < v && v < MOD) ? v : v % MOD); if (v < 0) v += MOD; return v; }
	
int madd(int& a, int b) { return a = add(a, b); }
int msub(int& a, int b) { return a = sub(a, b); }
int mmul(int& a, int b) { return a = mul(a, b); }
int mdivi(int& a, int b) { return a = divi(a, b); }

} // ModOperations
namespace ModOperations {

const int MOD = 1e9 + 7;

int mpow(long long b, long long e) {
	long long r = 1;
	while (e) {
		if (e & 1) {
			r *= b; 
			r %= MOD;
		}
		b *= b; 
		b %= MOD;
		e >>= 1;
	}
	return r;
}

int minv(int a) { assert(a); return mpow(a, MOD - 2); }
int add(int a, int b) { a += b; if (a >= MOD) a -= MOD; return a; }
int sub(int a, int b) { a -= b; if (a < 0) a += MOD; return a; }
int mul(int a, int b) { return 1LL * a * b % MOD; }
int divi(int a, int b) { return mul(a, minv(b)); }
int neg(int a) { return a == 0 ? 0 : MOD - a; }
int mod(long long v) { 
	v = int((-MOD < v && v < MOD) ? v : v % MOD); if (v < 0) v += MOD; return v; }
	
int madd(int& a, int b) { return a = add(a, b); }
int msub(int& a, int b) { return a = sub(a, b); }
int mmul(int& a, int b) { return a = mul(a, b); }
int mdivi(int& a, int b) { return a = divi(a, b); }

} // ModOperations
Back to top page