c++易忘简单知识点

来源:互联网 发布:天刀萝莉少女捏脸数据 编辑:程序博客网 时间:2024/05/20 08:00

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等价。
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下的逆元

逆元求解
 

c++中string类的详解


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; }
0 0
原创粉丝点击