yxc大神的代码模板 传送门(点我)
最大公约数(欧几里得算法)
ps:0与一个数的最大公约数是这个数本身,0不能与0求最大公约数。
int gcd(int a, int b) // 欧几里得算法
{
return b ? gcd(b, a % b) : a;
}
扩展欧几里得
int exgcd(int a, int b, int &x, int &y) // 扩展欧几里得算法, 求x, y,使得ax + by = gcd(a, b)
{
if (!b)
{
x = 1; y = 0;
return a;
}
int d = exgcd(b, a % b, y, x);
y -= (a / b) * x;
return d;
}
快速幂
typedef long long ll;
ll fast_power(ll a, ll k, ll p) // 求a^k mod p
{
ll res = 1 % p;
while (k)
{
if (k & 1) res = res * a % p;
a = a * a % p;
k >>= 1;
}
return res;
}
快读
inline int read(){
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return x*f;
}
分解质因数
typedef unsigned long long ull;
void resolve(ull n){
for(ull i=2;i*i<=n;i++)
while(n%i==0&&n!=1)cout<<i<<" ",n/=i;
if(n!=1)cout<<n<<" ";
}