Форум программистов, компьютерный форум CyberForum.ru

Найти сумму делителей - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Определить операции над списком: http://www.cyberforum.ru/cpp-beginners/thread667384.html
Определить класс список элементов. В определение класса включить два конструктора для определения списка по его размеру и путем копирования другого списка. Определить операции над списком: ++ сортировка списка по возрастанию; -- расположение элементов списка в обратном порядке. Вот мои мысли... Помогите с операциями... #include "stdafx.h" #include <stdio.h> #include <conio.h>...
C++ найти среднее арифметическое чисел Написать программу, которая генерирует 4 случайных числа, значение которых лежит в интервале от 1 до 30. Вывести их на экран и найти среднее арифметическое этих чисел. http://www.cyberforum.ru/cpp-beginners/thread667375.html
Доработать: защитить от дурака (запретить введения опр. символов) C++
Доброго времени суток форумчане, я впал в моральный приступ эпилепсии, посему создал новую тему, т.к. предыдущая зашла в тупик. Итак, вот программа, с её доскональным описанием: /*Программа, которая в массиве (заполненным рандомно на интервале от 0 до 155) с заданным кол-вом элементов, находит числа у которых при делении на 7 в остатке остаётся 1, 2 или 5 */ #include <iostream> #include...
C++ Офсеты и память запущенного процесса
Всем привет. Пишу бота для wow, пока что простенького, для рыбалки, и появилась определяющая всего бота проблема. А именно: для того чтобы начать управлять персонажем, нужно получить адреса в памяти, которые отвечают за то или иное действие/значение. Пролистал много информации, но так и не нашел нужной - как найти те самые офсеты, чтобы при сложении базового адреса процесса и офсета получался...
C++ Как заполнить матрицу заданными значениями? http://www.cyberforum.ru/cpp-beginners/thread667337.html
Заполнить массив размерами N*N такой последовательности: 6 1 1 1 1 5 2 6 1 1 5 4 2 2 6 5 4 4 2 2 5 6 4 4 2 5 3 3 6 4 5 3 3 3 3 6
C++ Напишите блок схему к коду #include <iostream.h> #include <conio.h> void main() { clrscr (); char Number (int a, int b); int a,b; cout<<"Ввести 2 числа:"; cin>>a>>b; cout<<Number (a,b)<<'\n'; подробнее

Показать сообщение отдельно
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
09.10.2012, 20:23     Найти сумму делителей
Представляю наибыстрейший алгоритм нахождения суммы делителей:
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
29
30
unsigned long Sum(unsigned long a)
{
   unsigned long sum = 1, k = 1, i;
   if (a == 1)
      return a;
   while ((a & 1) == 0)
   {
      k <<= 1;
      a >>= 1;
   }
   k = (k << 1) - 1;
   if (a == 1)
      return k;
   else
      sum = k;
   for(i = 3; i*i <= a; i += 2)
   {
      k = 1;
      while(a % i == 0)
      {
         k *= i;
         a /= i;
      }
      if (k > 1)
         sum *= ((k * i) - 1)/(i - 1);
   }
   if (a > 1)
      sum *= a + 1;
   return sum;
}
просто немного переделал алгоритм из этой темы:
Быстрое нахождение количества делителей натурального числа

Добавлено через 13 минут
можете протестировать данный алгоритм для чисел порядка
1 000 000 000
работает моментально
 
Текущее время: 22:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru