您的位置:首页 > 编程语言 > C语言/C++

c++易忘简单知识点

2016-05-18 17:25 302 查看
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;
}


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: