ACM集训队第二周

1.快速乘

快速乘相对于一般乘法具有优化降低时间复杂度的特点,可以减少运行的时间
其原理就是ab将其中一个数字转化为二进制再进行分步相乘,求出最后总和
栗如:2
5=2*(101)2=24+21=10

int ans=0;
while(b)
{
	if(b%2)
	{
	ans+=a;
	}
	a*=2;
	b/=2;
}

2.快速幂

同快速乘一样,快速幂也可以降低时间复杂度,减少运行的时间
其原理就是a^b将b转化为二进制然后分步求幂,然后求出

fost_pow(int a,int b)
{
	int ans=1;
	while(b)
	{
		if(b%2)
		{
			ans=ans*a;
		}
		a=a*a;
		b/=2;
	}
}

3.GCD

GCD即是求最大公约数的算法,使用辗转相除的方式来进行求最大公约数。辗转相除当余数为0时,除数即为两个数的最大公约数

#include<stdio.h>
int gcd(int a,int b)
{
    if(b==0)
        return a;
    return gcd(b,a%b);
}
int main()
{
    int m,n;
    scanf("%d%d",&m,&n);
    printf("%d\n",gcd(m,n));
    return 0;
}

*当多个数时 可以套用
举个栗子:gcd(gcd(a,b),c);

猜你喜欢

转载自blog.csdn.net/qq_43731022/article/details/84348704