1. 程式人生 > >ACM集訓隊第二週

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);