0 / 0 / 1
Регистрация: 20.09.2015
Сообщений: 13
1

Найти число от 1 до n с максимальной суммой делителей

20.09.2015, 17:36. Показов 1903. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Должно работать для n<=1 000 000

Вот мой код и я не знаю где ошибка...
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
Program b;
Var
n,i,j,max,maxn:Integer;
a:Array[1..1000000] Of Integer;
BEGIN
      Readln(n);
      j:=1;
      For i:=1 To n Do
        a[i]:=1;
      For i:=2 To n Do
        Begin
              j:=i;
              While j<=n Do
              Begin
                a[j]:=a[j]+i;
                j:=j+i;
              End;
        End;
      max:=a[1];
      maxn:=1;
      For i:=1 To n Do
        If (a[i]>max) Then
        Begin
              max:=a[i];
              maxn:=i;
        End;
      Writeln(maxn);
END.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.09.2015, 17:36
Ответы с готовыми решениями:

Найти натуральное число из интервала от a до b с максимальной суммой делителей
Найти натуральное число из интервала от a до b с максимальной суммой делителей.

Найти натуральное число от 1 до 10000 с максимальной суммой делителей.
Условие задачи: Найти натуральное число от 1 до 10000 с максимальной суммой делителей. код есть,но...

Найти натуральное число в интервале от1 до 1000 с максимальной суммой делителей
Найти натуральное число в интервале от1 до 1000 с максимальной суммой делителей.

На отрезке [2, n] определить число с максимальной суммой делителей.
На отрезке определить число с максимальной суммой делителей.

2
Почетный модератор
64304 / 47599 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
20.09.2015, 17:59 2
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Program b;
var n,i,j,k,max,maxn:Integer;
begin
readln(n);
max:=1;
maxn:=1;
for i:=2 To n Do
 begin
  k:=2;//1 и само 
  for j:=2 to trunc(sqrt(i)) do//считаем делители до корня из числа и умножаем на 2
  if i mod j=0 then inc(k,2);
  if frac(sqrt(i))=0 then dec(k);//если число полный квадрат, то минус 1
  if k>max then
   begin
    max:=k;
    maxn:=i;
   end;
  end;
write(maxn);
end.
до 1 000 000 считает сравнительно долго, но более быстрого алгоритма не знаю.
1
0 / 0 / 1
Регистрация: 20.09.2015
Сообщений: 13
20.09.2015, 18:29  [ТС] 3
Спасибо, но я уже нашел ошибку
Вот код который меньше чем за секунду считает)
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
Program b;
Var
n,i,j,max,maxn:Longint;
a:Array[1..1000000] Of Longint;
BEGIN
      Readln(n);
      j:=1;
      For i:=1 To n Do
        a[i]:=1;
      For i:=2 To n Do
        Begin
              j:=i;
              While j<=n Do
              Begin
                a[j]:=a[j]+i;
                j:=j+i;
              End;
        End;
      max:=a[1];
      maxn:=1;
      For i:=1 To n Do
        If (a[i]>max) Then
        Begin
              max:=a[i];
              maxn:=i;
        End;
      Writeln(maxn);
END.
0
20.09.2015, 18:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.09.2015, 18:29
Помогаю со студенческими работами здесь

Найти число с максимальной суммой делителей
Хелп плиз :) Нужна прога, которая находит натуральное число от 1 до 10000 с максимальной суммой...

Найти число с максимальной суммой делителей
Дано число N. Найти число из диапазона от 1 до N с максимальной суммой делителей (включая непростые...

Найти число с максимальной суммой делителей
Циклы. В диапазоне найти число с максимальной суммой делителей

В диапазоне найти число с максимальной суммой делителей
в диапазоне найти число с максимальной суммой делителей


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru