关于 欧几里得算法 和 辗转相除 2022/2/18
gcd()和lcm()
要想证明这东西也很简单 :
我们把a与b相乘,会发现:对于任意的pi,它的指数为max(a,b)+min(a,b)=a+b;
所以每一个因子都会满足,所以就是这样了。。。
关于最大公约数的计算方法:
我下面就介绍一种:
我先扯一下啥是欧几里得算法:
其实就是让我筛选出n以内所有的素数,使其时间复杂度为o(n);
直接举例子吧(max==12)
我们先找到最小的质数2,让2挨个乘每一个数(0到12),得到的数放进筛除表(即我们筛出来的合数),接着再筛3,再筛5,再筛7.。。(即把0到十二的每个数都乘一遍这个素数)
那你可能就会有疑问了,比如2*6=12,3*4也等于12,那我到底筛哪个呢?
那你可问对了,我们观察一下图,会发现我们是在6*2的时候把12筛掉的,因为我们在第一轮乘2的时候12就筛掉了,再到了3*4的时候一看有过12了,直接跳过,不要管他就完了
还有几个问题
1.max是啥?? 其实max就是n啊,我们就是想要求max以内的质数,那你可能就有疑问了(其实是我有这个疑问),我筛掉的数早就都已经大于12了,为啥要一直筛到十二呢?其实我们要的是没被除掉的数,可以看出,在12时素数表内的数正好是12以内的素数!!
2.我要让1到12的数乘素数,那素数是怎么来的呢?? 其实我给你模拟一下你就知道了,比如i=2的时候,我把4放入筛数表那四以内的数就可以把它放入我们的素数表了(4以内的素数就已经被筛完了),下一轮我就乘素数表里的素数就行了!!
比如说:让你输入两个数,并输出其最大公约数:
当然,关于定义gcd亦可以用三母运算缩成一行:
上难度!
这玩意,用最麻烦的方法就是:根据那个神仙定理可以知道输出的两数的乘积就是gcd*lcm,把乘积的所有因子列举出来,一个一个试,代码如下:
当然,了解了一下旁边大佬的方法,复杂度就没那么贱了:
就是用最大公约数除以最小公倍数,把所得的数字结果写成质数乘积的形式,让其中的每一个数。。。。哎呀,有点难说,还是举个栗子吧:
比如最小公倍数是60,最大公约数是3,那就用60/3=20,20=2*2*5.,则有这些组合方式:
{3,3*2*2*5} {3*2,3*2*5} {3*5,3*2*2} {3*2*5,3*2} {3*2*2*5,3} {3*2*2,3*5}
好了,就先讲到这吧
再见,祝你好运! 2022/2/18
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)