Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
 
93 / 47 / 63
Регистрация: 16.06.2014
Сообщений: 380
1

Объясните разницу во времени исполнения кода

30.03.2015, 12:07. Просмотров 336. Ответов 1
Метки нет (Все метки)

Доброго времени суток.
Ниже привожу 2 программы, которые отличаются лишь способом получения степени.
1 программа - через цикл for:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#include <omp.h>
using namespace std;
 
int main() {
    
    unsigned __int64 size;
    double time;
    cin>>size;
    time=omp_get_wtime();
    while (1)
    {unsigned __int64 chi,sum=0,c=1,f=0;
     int a;
     size++;
     chi=size;
     while (chi!=0)
     {a=chi%10;chi=chi/10;sum+=a;}
     while (1)
     {unsigned __int64 b=1;
      c++;
      for(int i=1;i<=c;i++)
       b*=sum;
      if (b>size || (sum==1 && size!=1)) break;
      if (b==size) {cout<<b<<endl;f=1;break;}}
     if (f==1) break;
    }
    cout<<omp_get_wtime()-time<<endl;
}
2 программа - через стандартную функцию pow():
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include <omp.h>
using namespace std;
 
int main() {
    
    unsigned __int64 size;
    double time;
    cin>>size;
    time=omp_get_wtime();
    while (1)
    {unsigned __int64 chi,sum=0,c=1,f=0;
     int a;
     size++;
     chi=size;
     while (chi!=0)
     {a=chi%10;chi=chi/10;sum+=a;}
     while (1)
     {unsigned __int64 b=1;
      c++;
      pow(sum,c);
      if (b>size || (sum==1 && size!=1)) break;
      if (b==size) {cout<<b<<endl;f=1;break;}}
     if (f==1) break;
    }
    cout<<omp_get_wtime()-time<<endl;
}
Программа решает следующую задачу:
Найти минимальное число, большее заданного, которое равно сумме своих десятичных цифр, возведенной в степень, большую 1 (например, 4913 = (4+9+1+3)3)
Я задал число 1000000000 и оказалось, что первая программа (цикл) нашла искомое число 8303765625 за время, равное 829.122, а вторая (pow) - за время, равное 1937.24.
Выходит, обращение к библиотечной функции настолько дольше, чем цикл?
Если да, то почему?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.03.2015, 12:07
Ответы с готовыми решениями:

Найти разницу во времени (вычесть из одного времени другое)
Нужно найти разницу во времени: t1 - t2. Просто так объекты типа datetime отниматься не хотят....

[Задача] Объясните результат исполнения программы
// Файл t1.cc #include &lt;iostream&gt; class C { int x; public: C() { x = 10; } ...

объясните разницу
1 if((mysocket=socket(AF_INET,SOCK_STREAM,0))&lt;0) if(mysocket=socket(AF_INET,SOCK_STREAM,0)&lt;0) 2...

Ошибка времени исполнения
Помогите разобраться с ошибкой. Проблема только в функции create_file. Почему-то когда запускается...

1
Модератор
2660 / 1837 / 404
Регистрация: 26.03.2015
Сообщений: 6,819
30.03.2015, 13:14 2
Ответы совпадают? У Вас значение pow(sum,c) ничему не присваивается. По смыслу вместо "b=1" должно быть присваивание.

Библиотечная функция (double,double). То есть, она может возводить целые числа в целочисленную степень неоптимально. (я не знаю, как на самом деле)

Добавлено через 9 минут
А зачем Вы используете pow() или цикл?
У Вас уже посчитано sum^c. Чтобы посчитать следующую степень, достаточно умножения.

инициализацию b (строку 19) выносим за пределы цикла 18
переменную c (строку 20) убираем
цикл (строку 21) убираем
степень считается одним умножением (строка 22)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.03.2015, 13:14

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Ошибка времени исполнения
Доброго времени суток! Опираясь на...

Объясните разницу в объектах
Добрый день! Чем отличаются Window и window? Object от object, Document от document? И так далее. ...

Объясните разницу в поведении
В чём принципиальная разница между двумя функциями? Почему в первом случае вычисления завершаются,...

Объясните разницу между....
Привет АLL!!! Сабж. Чем они отличаются???? Set oradynaset =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.