一个关于数学的头文件(C++)

闲来无事,写了个头文件。
里面有很多关于数学的函数,例如:组合数公式(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
原创文章 75 获赞 126 访问量 1万+

猜你喜欢

转载自blog.csdn.net/liuzich/article/details/103635946