C语言算法详解:数论与图论

需积分: 10 3 下载量 14 浏览量 更新于2024-10-05 收藏 153KB PDF 举报
"C语言算法大全.pdf" 在C语言编程中,算法是解决问题的关键。这份资料提供了丰富的算法示例,涵盖了数论和图论等多个领域,对于C语言的学习者来说是一份宝贵的参考资料。 一、数论算法 1. 求两数的最大公约数 (Greatest Common Divisor, GCD) 在C语言中,可以使用欧几里得算法来计算两个整数的最大公约数。如描述中的代码所示,当b等于0时,a即为最大公约数;否则,递归调用gcd函数,传入b和a除以b的余数,直到余数为0。 2. 求两数的最小公倍数 (Least Common Multiple, LCM) 最小公倍数可以通过两个数的乘积除以它们的最大公约数得到。在C语言中,首先检查a是否小于b,如果小于则交换两者,然后不断将a加到lcm上,直到lcm能被b整除。 3. 素数的求法 - 小范围内判断一个数是否为质数:遍历从2到该数平方根的所有整数,若存在能整除该数的,则不是质数。 - 判断longint范围内的数是否为素数:填充一个布尔数组p,表示每个数是否为素数,然后从2开始,每次将所有偶数标记为非素数,再将所有2的倍数的倍数标记为非素数,最后筛选出数组中为真的元素,即为素数。 二、图论算法 1. 最小生成树 - Prim算法:Prim算法用于寻找带权连通图的最小生成树。初始化时,lowcost和closest数组分别用于记录从起点v0到各个顶点的最低成本和最近顶点。从v0开始,每次选择与当前树连接且边权最小的顶点加入到树中,直至所有顶点都被包含。 这些算法是解决复杂问题的基础,掌握它们能帮助你更好地利用C语言解决实际问题。例如,求解数学问题、优化数据结构、构建高效的网络路由等。通过理解和实践这些算法,你可以提升自己的编程能力,解决更复杂的计算挑战。