Форум программистов, компьютерный форум, киберфорум
QBasic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8

Найти число, сумма делителей которого в три раза больше самого числа

21.08.2016, 09:27. Показов 2263. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Найти число, сумма делителей которого в три раза больше самого числа
(Само число к делителям не относится)
Программа нашла наименьшее из таких чисел - 30240
примечание
Тут бейсику пришлось посчитать. Вероятнее всего он никогда не найдет
числа, сумма делителей которого в 4 раза, (в 5 раз) больше самого числа...

QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
REM
REM  30240
REM
 
DECLARE FUNCTION f! (n!)
 
CLS
 
FOR i = 1000 TO 31000
   IF f(i) = 3 * i THEN PRINT i;
NEXT
END
 
FUNCTION f (n)
   FOR i = 1 TO n \ 2
      IF n MOD i = 0 THEN s = s + i
   NEXT i
   f = s
END FUNCTION
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.08.2016, 09:27
Ответы с готовыми решениями:

Найти числа, меньше 1000, сумма делителей (без самого числа) которых, больше данного числа
Найти числа, меньше 1000, сумма делителей(без самого числа) которых, больше данного числа. помогите плз

Найти первое натуральное число, сумма делителей которого больше S
Найти первое натуральное число, сумма делителей которого больше S.

Существует ли треугольник АВС, у которого АВ = 7 см, ВС в два раза больше АВ, а АС в три раза больше АВ
15. Существует ли треугольник АВС, у которого АВ = 7 см, ВС в два раза больше АВ, а АС в три раза больше АВ.

4
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33379 / 21503 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 12
21.08.2016, 19:44
Лучший ответ Сообщение было отмечено echs как решение

Решение

Цитата Сообщение от geh Посмотреть сообщение
Вероятнее всего он никогда не найдет
числа, сумма делителей которого в 4 раза, (в 5 раз) больше самого числа...
Ну ты же несколько тем назад сказал, что Бейсик может всё, что же он, не сможет найти число 14182439040 (сумма делителей которого превышает само число в 5 раз) или число 154345556085770649600 (в 6 раз), или 1413108979474383482598494027384855232643 43544818565120000 (в 7 раз)?

Кстати, поздравляю, ты только что открыл для себя совершенные числа (k-Perfect numbers)
1
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8
22.08.2016, 09:06  [ТС]
volvo
Спасибо за поздравление, а также за решение моей задачи.
Я и сейчас могу сказать, что лучше бейсика ничего на свете
нет. Кстати, я не утверждал, что бейсик может решить Всё.
Абсолютно Всё. Это так принято говорить. И вы это не хуже
меня знаете. Однако мне очень приятно Ваше участие в моей
теме. Еще раз СПАСИБО!
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33379 / 21503 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 12
22.08.2016, 17:35
Лучший ответ Сообщение было отмечено echs как решение

Решение

geh, а ты знаешь, что нахождение нужного тебе ответа можно исправлением 6-ти символов ускорить минимум в 2 раза, а можно - в 10 раз?
Поскольку я не считаю QB лучшим языком, то код приведу на Паскале
Просто по-другому считая сумму делителей. Если сейчас ты перебираешь все числа от 1 до n/2 и проверяешь остаток от деления n на каждое из этих чисел, то я попробую посчитать через разложение на простые множители. Скажем, число 120 раскладывается:
https://www.cyberforum.ru/cgi-bin/latex.cgi?120 = 2^3*3^1*5^1
, значит, сумму делителей можно найти так:
https://www.cyberforum.ru/cgi-bin/latex.cgi?\left(1+2+4+8 \right)\cdot\left(1+3 \right)\cdot\left(1+5 \right)=15\cdot 4\cdot 6=360
(Первая скобка - сумма степеней двойки от 0-ой до 3-ей, поскольку в разложении есть 3 двойки, вторая - сумма степеней тройки от 0-ой до 1-ой, т.к. тройка в разложении всего одна, то же самое и с пятеркой). Пишем программу:

Pascal
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
{$mode objfpc}
uses windows;
 
type
   Tlong = qword;
 
const
   n = 50;
 
var
  f : array [1 .. n] of
  record
    mult  : integer;
    power : integer;
  end;
 
// I variant
function ds(i : longint) : longint;
var j : longint;
begin
  result := 0;
  for j := 1 to i div 2 do
    if i mod j = 0 then result := result + j;
end;
 
 
procedure Add(i : integer);
var
   j : integer;
   found : boolean;
begin
   found := false; j := 1;
   while (j <= n) and (f[j].mult > 0) and (not found) do
      if f[j].mult = i then
      begin
         inc(f[j].power); found := true;
      end
      else inc(j);
 
   if not found then
   begin
      f[j].mult := i; f[j].power := 1;
   end;
end;
 
function Factorization(x : Tlong) : Tlong;
var i : Tlong;
 
   procedure DivX;
   begin
      while (x > 1) and (x mod i = 0) do
      begin
         Add(i); x := x div i;
      end;
   end;
 
var
  j, k : integer;
  t, s : Tlong;
 
begin
   i := 2;
   DivX;
   i := 3;
   while i < x div 2 do
   begin
      DivX;
      inc(i,2);
   end;
   if x > 1 then Add(x);
 
   k := 1;
   result := 1;
   while (k <= n) and (f[k].mult > 0) do
   begin
      // write(f[k].mult, '^', f[k].power, ' ');
 
      t := 1; s := 1;
      for j := 1 to f[k].power do
      begin
         t := t * f[k].mult;
         s := s + t;
      end;
      result := result * s;
      inc(k);
   end;
end;
 
var
   p, num : Tlong;
   i : integer;
 
   tm : dword;
begin
   tm := gettickcount;
   num := 2;
   repeat
      inc(num, 2);
      FillByte(f, sizeof(f), 0); // обнуляем массив структур
      p := Factorization(num);
   until(p = 4 * num);
   writeln(num, ': sum of divisors = ', p, ' vs ', 4 * num);
   writeln('time = ', gettickcount - tm);
 
   // сравниваем с твоим методом вычисления суммы делителей
   tm := gettickcount;
   for i := 1 to 20000 do
   if ds(2*i) = 3 * 2*i then
   begin
      writeln(2*i); break;
   end;
   writeln('time = ', gettickcount - tm);
 
   readln;
end.
, и получаем:
Code
Running "d:\__volvo\programs\pascal\thread1796711.exe "
30240: sum of divisors = 120960 vs 120960
time = 93
30240
time = 921
Чувствуешь разницу между 93 и 921? А если учесть, что нечетных совершенных чисел пока не обнаружено, и ходить только по четным - то твоя программа простым добавлением STEP 2 ускоряется в 2 раза (но начинать цикл нужно с двойки, а не с 1-цы)
1
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8
22.08.2016, 19:08  [ТС]
volvo
Спасибо! И за программу, и за алгоритм, и за Ваш пример.
Алгоритм мне конечно неизвестен, хотя я изучал алгебру
и теорию чисел. Но меня больше привлекали уравнения...
Каждый Ваш пост открывает для меня новую грань Ваших
знаний. Это притягивает. Я уже понял, что Вы умный и
талантливый человек и с Вами приятно общаться. Да и чувство
юмора Вам не чуждо.
СПАСИБО!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.08.2016, 19:08
Помогаю со студенческими работами здесь

Найти число из диапазона 1.1000, у которого сумма делителей максимальна
Задача из раздела &quot;C для начинающих&quot;. Вот мое решение (довольно громоздкое): task n = search z 0 0 0 where...

Определить, больше ли сумма простых делителей числа М, произведения составных делителей числа N
Помогите решить задачи с процедурами, пожалуйста)) Заданы два целых числа М, N. Определить, больше ли сумма простых делителей числа М,...

Определить, больше ли сумма простых делителей числа М, произведения составных делителей числа N.
Помогите решить эту задачу с процедурами, пожалуйста)) Заданы два целых числа М, N. Определить, больше ли сумма простых делителей числа...

Найти число, у которого сумма цифр больше
Дано два двухзначных числа. Найти число, у которого сумма цифр больше. Если сумма цифр этих чисел одинаковая, то вывести первое заданное...

Найти число, у которого сумма цифр больше
Дано два двухзначных числа. Найти число, у которого сумма цифр больше. Если сумма цифр этих чисел одинаковая, то вывести первое заданное...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru