1.快速乘
快速乘相对于一般乘法具有优化降低时间复杂度的特点,可以减少运行的时间。
其原理就是ab将其中一个数字转化为二进制再进行分步相乘,求出最后总和
栗如:25=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);