2013-05-13 3 views
2

Я делаю проблему 3 в Project Euler в поиске самого большого gcd. Я должен найти gcd для 600851475143m, но я хочу найти его с меньшим числом, прежде чем я это сделаю. Вот ссылка на проблему, я пишу это в С.найти самые большие проблемы с контуром gcd

http://projecteuler.net/problem=3

У меня возникли проблемы с моим циклом. Мой алгоритм состоит в том, чтобы иметь увеличивающееся число (i) продолжать делить данное число тогда и только тогда, когда остаток равен нулю. Данное число уменьшается по мере его деления. Если i и a равно заданному числу, то 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); 
} 




} 
+1

Опишите проблему, о которой вы говорите? –

+0

Веб-сайт Project Euler довольно ясен по издательским решениям - он активно обескуражен. http://projecteuler.net/about – gavinb

ответ

0

в то время как цикл выхода рано из

while (origNumber/i != 1 && origNumber % i != 0) 
          ^^^^^^^^^^^^^^^^^^^^^^ 

origNumber % i != 0 станет ложным, когда origNumber не делится на I (который, вероятно, произойдет, прежде чем все делители

Измените оператор цикла на:

while ((origNumber/i) != 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; 
} 
+0

этот код будет работать, просто вам нужно изменить «int origNumber» на «unsigned long long int origNumber», чтобы использовать с большими знаками, такими как номер проблемы 3. – rcpayan

+0

@rcpayan '" Я хочу найти его с меньшим числом, прежде чем я это сделаю ».' – BLUEPIXY

+0

Извините, моя ошибка. – rcpayan

Смежные вопросы