我在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);
}
}
答案 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;
}