我正在做欧拉计划中的问题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)

09-30 14:35