Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.01.2019, 15:52   #1
Olenk
Новичок
Джуниор
 
Регистрация: 23.01.2019
Сообщений: 6
Радость Вывести совершенные числа. Помогите сократить время работы программы

#include <iostream>
using namespace std;
int main()
{ int N,D,i,j,sum,m=0;
cin » N;
D=N;
for (j=2;j<=D;j++) {sum=1;
N=j;
for (i=2; i<N/2;i++) if (N%i==0) {sum+=i;
sum+=N/i;};
if (sum==N) {cout « N « " ";
m++;};
};
if (m==0) cout « "0";
return 0;
}
Olenk вне форума Ответить с цитированием
Старый 23.01.2019, 16:07   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

внутренний цикл до корня квадратного из N
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 23.01.2019, 16:20   #3
Olenk
Новичок
Джуниор
 
Регистрация: 23.01.2019
Сообщений: 6
По умолчанию

Работает быстрее, но все равно надо сократить..
#include <iostream>
#include <cmath>
using namespace std;
int main()
{ int N,D,i,j,sum,m=0;
cin»N;
D=N;
for (j=2;j<=D;j++) {sum=1;
N=j;
for (i=2; i<sqrt(N);i++) if (N%i==0) {sum+=i;
sum+=N/i;};
if (sum==N) {cout« N« " ";
m++;};
};
if (m==0) cout « "0";
return 0;
}
Olenk вне форума Ответить с цитированием
Старый 23.01.2019, 16:31   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Для какого N вас не устраивает скорость?
p51x вне форума Ответить с цитированием
Старый 23.01.2019, 16:34   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
i<=sqrt(N)
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 23.01.2019, 16:53   #6
Olenk
Новичок
Джуниор
 
Регистрация: 23.01.2019
Сообщений: 6
По умолчанию

A391E56D-87BB-410A-B117-F1A42E39AD89.jpg
Olenk вне форума Ответить с цитированием
Старый 23.01.2019, 17:00   #7
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
if (N%i==0) {sum+=i;
sum+=N/i;}; // N%i =0
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 23.01.2019, 17:07   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Код:
sum+=N/i;}; // N%i =0
И? 10 % 5 = 0, но 10 / 5 = 2 или вы о чем?
p51x вне форума Ответить с цитированием
Старый 23.01.2019, 17:08   #9
Olenk
Новичок
Джуниор
 
Регистрация: 23.01.2019
Сообщений: 6
По умолчанию

N/i - так я считаю второй делитель.
Например число 64. I=2, тогда ещё один делитель 64/2=32
(Мне надо сумму всех делителей)
Olenk вне форума Ответить с цитированием
Старый 23.01.2019, 17:18   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

их всего-то 5 для int: 6, 28, 496, 8128 и 33550336 . Забей в прогу и победишь по скорости ))

PS если делитель равен корню квадратному, то его дважды суммировать не надо
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 23.01.2019 в 17:21.
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывести время в миллисекундах с начала работы программы по встроенной функции Milliseconds в PascalABC.NET constant_bel Паскаль, Turbo Pascal, PascalABC.NET 8 03.06.2016 08:43
Как сократить время работы программы dimon_snake Паскаль, Turbo Pascal, PascalABC.NET 43 01.02.2016 23:59
Вывести время работы процедуры celest Помощь студентам 1 09.04.2013 21:22
Вывести все совершенные числа в заданном интервале А — В ксения777 Помощь студентам 5 31.10.2011 21:14
Как вывести время работы приложения razzmatazz Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 23.03.2009 00:17