1. 辗转相除法(求最小公约数&&公倍数)
int f(int n,int m)
{
int r;
if(n>m)swap(n,m);//使n为最小
while(n!=0)
{
r=m%n;
m=n;
n=r;
}
return m;//返回最大公约数
}
2. gcd
int gcd(int x,int y)
{
return y?gcd(y,x%y):x;
}
3.冒泡排序
for(int i=0;i<10-1;i++) //n个数要进行n-1趟比较
{
for(int j=10-1;j>=i+1;j--) //每趟比较n-i次
{
if(a[j-1]>a[j]) //依次比较两个相邻的数,将小数放在前面,大数放在后面
{
int t=a[j];
a[j]=a[j-1];
a[j-1]=t;
}
}
}
4. 乘法逆元
定义:
满足a*k≡1 (mod p)的k值就是a关于p的乘法逆元。
为什么要有乘法逆元呢?
当我们要求(a/b) mod p的值,且a很大,无法直接求得a/b的值时,我们就要用到乘法逆元。
我们可以通过求b关于p的乘法逆元k,将a乘上k再模p,即(a*k) mod p。其结果与(a/b) mod p等价。
满足a*k≡1 (mod p)的k值就是a关于p的乘法逆元。
为什么要有乘法逆元呢?
当我们要求(a/b) mod p的值,且a很大,无法直接求得a/b的值时,我们就要用到乘法逆元。
我们可以通过求b关于p的乘法逆元k,将a乘上k再模p,即(a*k) mod p。其结果与(a/b) mod p等价。
int find(int x)
{
int k=mod-2,ans=1;
while(k)
{
if (k&1) ans=(lint)ans*x%mod;
x=(lint)x*x%mod;
k>>=1;
}
return ans;
} x在%mod下的逆元
逆元求解
6.结构体排序
struct program
{
int s;
int e;
}p[maxn];
struct program temp; //这里的中间量一定要是结构体类型!!!
for(i=0;i<n-1;i++)
for(j=n-1;j>i;j--)
if(p[j-1].e>p[j].e) //冒泡排序倒着来
{
temp=p[j];
p[j]=p[j-1];
p[j-1]=temp;
}