2014-01-25 7 views
-2

Как сделать этот код более эффективным для больших чисел размером 10^9. Я не думаю, что могу уменьшить количество циклов в этом.Как уменьшить число циклов в моем коде

#include <stdio.h> 
int main(void) { 

int e; 
int t; 
scanf("%d",&t); 
for(e=0;e<t;e++){ 
     int x,y; 
     scanf("%d",&x); 
     scanf("%d",&y); 
     int sum=0; 
     int j,k,i; 
     for(j=x;j<y;j++){ 
      for(k=j+1;k<=y;k++){ 
       int max=1; 
       for(i=2;i<=j;i++) 
        if((j%i==0)&&(k%i==0)) 
        max=i; 
       sum+=max; 
      } 
     } 
     printf("%d",sum); 
    } 
} 
+6

Что делает ваш код? если вам нужен лучший алгоритм, нам понадобится правильное описание проблемы. –

+0

Эй, это 2014 год, только через шестьдесят лет после того, как стиль C стал устаревшим. Вы можете объявлять свои переменные там, где они вам нужны, а не просачивать их повсюду, например. 'for (int e = 0; e

+0

Я хочу построить алгоритм для вычисления суммы всех возможных наибольших общих делителей в инклюзивном диапазоне, введенном пользователем. – user3234939

ответ

0

Если размер входного сигнала очень огромный, как вы сказали, и вы можете сделать некоторые проверки для некоторых номеров вручную перед входом в цикл, и это может уменьшить количество петель в 10 раз или около того перед входом. (Даже если проверка диапазона для небольших чисел будет полезна как 2 * x == x * 2)

Также могут быть кратные 10 и 5 и т. Д. В первом цикле могут быть сведены на нет.

Лота лучшего алгоритма доступен по сети поиска немного больше, если вы не можете прийти с вашим собственным

Попробуйте добавить несколько комментариев в коде, так что может быть более понятным меньшим усилием от людей, помогая вам.

ПРИМЕЧАНИЕ. - Я не прошел весь ваш код полностью, и большинство людей не сделало этого. ДОБАВИТЬ КОММЕНТАРИЙ

1

Алгоритм наибольшего общего делителя Евклида - самый исторический и, вероятно, самый эффективный алгоритм вычисления gcd, он может помочь вам сократить количество циклов для циклов.

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