C 最低公因数

C 最低公因数,c,algorithm,C,Algorithm,有人能提出一些快速的方法来计算给定两个数字的最小公因数(不包括1)吗? 一种方法是检查GCD(a,b)>1,素因子分解(a和b),并选择最小的公共素因子作为结果 他们的方法更好吗 例如:LCF(20,30)=2,LCF(13,39)=13最后,我认为你不会找到比尝试用素数除以这两个数更好的方法,直到你找到一个将这两个数都除掉或达到sqrt(min(a,b))只要从2循环到值n/2,其中n是两个数中较小的一个。按照给定条件将条件放入循环中 对于(int i=2;iIs)这个家庭作业?你尝试了什么?

有人能提出一些快速的方法来计算给定两个数字的最小公因数(不包括1)吗? 一种方法是检查GCD(a,b)>1,素因子分解(a和b),并选择最小的公共素因子作为结果

他们的方法更好吗


例如:LCF(20,30)=2,LCF(13,39)=13

最后,我认为你不会找到比尝试用素数除以这两个数更好的方法,直到你找到一个将这两个数都除掉或达到
sqrt(min(a,b))
只要从2循环到值n/2,其中n是两个数中较小的一个。按照给定条件将条件放入循环中
对于(int i=2;iIs)这个家庭作业?你尝试了什么?网络上可能有一百万(夸张?…)资源涵盖了这个主题!请展示你尝试了什么。所以这里不是为了“为你做事”…@放松不,这不是一个家庭作业。我试过用二次seve来做。问题是如何做得更好?@ElRonnoco我已经提到了这个问题的一种方法。我希望提高它的复杂性。不确定我是否误解了你的算法。但是如果
g=gcd(a,b)>1
,您希望找到
g
的最小素因子,而不是将
a
b
单独分解。如果您首先计算
g=gcd(a,b),则会得到更好的最坏情况行为
然后搜索
g
@Daniel的最小素数因子,这对于最坏的情况来说是正确的,但是对于平均情况,给定两个随机数,统计上,它很可能比lcd是一个小数字要快。所以哑除素数法会发现它比单独计算gcd要快得多。也许一个混合解决方案,首先检查2、3和5(36%的情况),然后切换到计算gcd并找到其较小的除数(从7开始)将是最好的解决方案。我不认为这是非常正确的,gcd也很有可能是1,这完全破坏了忽略gcd的方式。我也认为(除非你对输入有特别的限制,例如没有质数因子<100)混合,首先检查几个小质数,然后进行GCD平均速度最快。你是对的,我忽略了GCD==1的情况,这似乎占了60%的情况。