栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c语言求解常用算法

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c语言求解常用算法

快捷且常用的算法可以在做题时起到事半功倍的效果,建议记忆后使用。
不定时更新~

1.快速幂运算
long pow_2(int b){
	long x = 2;
	//运算指数
	long res = 1;
	//运算结果
	while(b>0) {
		if(b&1) //转换成二进制后取最后一位
			res *=x;
		b >>= 1;//右移一位
		x*=x;
	}
	return res;
}

幂运算的话当然可以放个for循环然后222*2···,但是如果对于比较大的数这样是比较耗费时间的,所以我们借用二进制来快速运算
指数运算有个特点为底数相同时,两数相乘等于指数相加,所以我们可以将一个数转换为二进制数后每一位分别乘上对应的次数.
举个例子
配上图的话大概可以理解了,每次右移一位后判断是否要乘起来,但是每次右移一位之后都要将2的次数加一,一直到最左边的一位。这样结果就出来了。
当然不是用二进制的话可以将参数传入时添加一个变量,将要运算的指数传入。

2.最大公约数

这个就不多说了,很常用的算法,采用辗转相除法。

int gcd(long a, long b){
	if(b==0) return a;
	return gcd(b, a%b);
	//或者直接return b==0?a:gcd*b, a%b);
}
3.最小公倍数

最大公约数都有了最小公倍数肯定不能少啊

一种方法是求得最大公约数以后利用最大公约数求解

long lcm(long a, long b){
	return a/gcd(a, b)*b;
	//注意:之所以先除以最大公约数再相乘是为了减少溢出可能
}

另一种方法是使用更相减损数

long lcm(long a, long b){
	if(a
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/717955.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号