闲来无事,写了个头文件。
里面有很多关于数学的函数,例如:组合数公式(C(long long n,long long r,long long MOD)这个函数的意思是:从n个里取r个,返回取法数。最大公约数(gcd(int a,int b)。最小公倍数(lcm(int a,int b))……等等。
还加了环境优化参数。
注:命名为maths(不命名为math是因为在C++中有一个头文件叫math)
下面是代码,还有,我还在里面加了快读哟!
#ifndef _MATHS_
#define _MATHS_
#include<bits/stdc++.h>
#pragma GCC diagnostic error "-std=c++14"
#pragma GCC target("avx")
#pragma GCC optimize(3)
#pragma GCC optimize("Ofast")
using namespace std;
int gcd(int a,int b) {
if(a%b==0) return b;
return gcd(a%b,b);
}
int lcm(int a,int b) {
return a*b/gcd(a,b);
}
long long jc(long long n,long long MOD) {
long long Sum=1;
for(long long i=1;i<=n;i++)
Sum=Sum*i%MOD;
return Sum;
}
long long P(long long n,long long r,long long MOD) {
return jc(n,MOD)/jc(n-r,MOD);
}
long long C(long long n,long long r,long long MOD) {
return jc(n,MOD)/jc(n-r,MOD)/jc(r,MOD);
}
long long lj(long long n,long long MOD) {
int Sum=0;
for(int i=1;i<=n;i++)
Sum=(Sum+i)%MOD;
return Sum;
}
long long ni(long long n) {
long long Sum=0;
while(n!=0)
Sum=Sum*10+n%10,n/=10;
return Sum;
}
long long ksm(long long x,long long y) {
int result=1;
while(y>0) {
if(y&1) {
result=result*x;
}
x=x*x;
y=y>>1;
}
return result;
}
long long jz(long long n,long long m) {
if(n<m)return n;
else return n%m+10*(jz(n/m,m));
}
void read(int &x) {
char ch;
bool ok;
for(ok=0,ch=getchar();!isdigit(ch);ch=getchar())
if(ch=='-') ok=1;
for(x=0;isdigit(ch);x=x*10+ch-'0',ch=getchar());
if(ok) x=-x;
}
#endif