找到最大的gcd while循环问题

时间:2013-05-13 07:19:02

标签: c while-loop

我在Project Euler中找到问题3找到最大的gcd。我应该找到600851475143m的gcd,但我想在我这么做之前用较小的数字找到它。这是问题的链接,我在C中写这个。

http://projecteuler.net/problem=3

我的while循环遇到问题。我的算法是增加数量(i)当且仅当余数为零时,保持除以给定数字。给定的数量随着分割而减少。如果i和the等于给定的数字,则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);
}




}

2 个答案:

答案 0 :(得分:0)

由于

,while循环正在提前退出
while (origNumber / i != 1  && origNumber % i != 0)
                            ^^^^^^^^^^^^^^^^^^^^^^
当origNumber不能被i整除时,

origNumber % i != 0将变为false(这可能会在找到所有除数之前发生。

将循环语句更改为 - :

while ((origNumber / i) != 1)

答案 1 :(得分:0)

#include <stdio.h>

int main(void){
    int origNumber = 13195;
    int i = 2;
    while(i*i<origNumber){
        int isFactor = 0;
        while(origNumber % i == 0)
            isFactor = origNumber = origNumber / i;

        if(isFactor)
            printf("i = %d\n", i);
        i++;
    }
    printf("origNumber = %d\n", origNumber);
    return 0;
}