一:欧几里得算法
int gcd(int x,int y)
{
int m,n;
if(x>y)
{
m=x;
n=y;
}
else
{
m=y;
n=x;
}
int temp=0;
while(n>0)
{
temp=m%n;
m=n;
n=temp;
}
return m;
}
该算法的原理:设公约数为k,一个数为r1k,另一个数为r2k
r1k-r2k=(r1-r2)k,两个数相减的结果人就是k的倍数
该算法的复杂/2度为log(n)
快速取幂
int mi(int k,int x)//求k的x次方
{
if(x==0)
return 1;
if(x==1)
return k;
if(x%2==1)
return mi(k*k,x/2)*k;
else
return mi(k*k,x/2);
}
该算法只需要算log(x)次乘法,所以效率更高
快速幂的二进制求法
int pow(int k,int x)
{
int sum=1;
int base=k;
while(b!=0)
{
if(b&1)
{
sum*=base;
}
base*=base;
b>>=1;
}
return sum;
}
三:求一个多项式
这里的多项式保存在一个数组中
下标表示次数,该值表示前面的系数
int horner(int m[], int x,int n)
{
int poly=0;
for(int i=n-1;i>=0;i--)
{
poly=x*poly+m[i];
}
return poly;
}