我正在做欧拉计划中的问题3,寻找最大的gcd我应该找到600851475143m的gcd,但我想在找到之前先找到一个较小的数字这是问题的链接,我用C语言写的。
http://projecteuler.net/problem=3
我的while循环有问题我的算法是让一个递增的数(i)当且仅当余数为零时,继续除以给定的数。给定的数在被除时会减少。如果i和等于给定的数字,那么i是最大的GCD。
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int origNumber = 13195;
int i = 2;
while(origNumber / i != 1 && origNumber % i != 0)
{
if(origNumber % i == 0)
{
origNumber = origNumber / i;
}
if(origNumber == i)
break;
i++;
printf("origNumber = %d i = %d\n", origNumber, i);
}
}
最佳答案
while循环提前退出是因为
while (origNumber / i != 1 && origNumber % i != 0)
^^^^^^^^^^^^^^^^^^^^^^
origNumber % i != 0
当origNumber不可被i整除时将变为false(这可能在找到所有整除子之前发生)。将循环语句更改为-:
while ((origNumber / i) != 1)