c++易忘简单知识点

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;
	 }
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值