快速幂,快速乘

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_41591279/article/details/88683859

1、快速幂(乘法实现)

eg :  2^7    (2的7次方)

7   的二进制数为    111 

2^1  =  2 ;

2^2  =  2^1  *  2^1

2^4  =  2^2  *  2^2  

2^7  =  2^4  *  2^2  *  2^1

#include<stdio.h>
long long Fast_power(long long a,long long b)
{
	long long ans=1, base=a ;
	while(b!=0)
	{
		if(b&1!=0)//取b的二进制数最后一位 
			ans = ans * base ;
		base = base * base ;
		b>>=1 ;// b的二进制左移一位 等价于 b除以2 
	}
	return ans ;
}
int main()
{
	long long a = 2 ; 
	long long b = 10 ;
	
	
	printf("%lld",Fast_power(a,b)) ;
} 

 2、快速乘(加法实现)

eg:     2*7

7   的二进制数为    111 

2*1  = 1 

2*2  =  2*1 + 2*1 

2*4  =  2*2 + 2*2

2*7  = 2*4 + 2*2 + 2*1

#include<stdio.h>
typedef long long ll ;
long long cheng(ll a,ll b) 
{
	ll res = 0 ;
	while(b!=0)
	{
		if(b&1)
			res = res+a ;
		a = a + a;
		b>>=1 ;
	}
	return res ;
}
int main()
{
	ll a ;
	ll b ;
	scanf("%lld%lld",&a,&b) ;
	printf("%lld",cheng(a,b)) ;
	return 0 ;
}

猜你喜欢

转载自blog.csdn.net/qq_41591279/article/details/88683859