ACM集訓隊第二週
阿新 • • 發佈:2018-11-29
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);