Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 18.12.2013
Сообщений: 8
1

Написать поиск всех дружественных чисел в заданном диапазоне. Оптимизация

27.01.2014, 21:05. Показов 1026. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Необходимо написать поиск всех дружественных чисел в диапазоне 2..1е6.
Я смог решить задачу только "в лоб" - простой перебор, который считает ооочень долго по понятным причинам.
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 <stdio.h>
#include <conio.h>
#include <math.h>
 
int main()
{
    int n1, n2, d1, d2, i, h;
    for(h=2; h<1e6; h++)
      {
             n1=h;
             d1=1;
             d2=1;
             for(i=2; i<=sqrt(n1); i++)
               if(n1%i==0)
                 d1+=i;
                 
             n2=d1;
             for(i=2; i<=sqrt(n2); i++)
               if(n2%i==0)
                 d2+=i;
                 
             if(n1==d2&&n1<n2&&n1!=n2)
               printf("%d %d\n", n1, n2);
               }
               
      getch();
}
Попробовал заменить условие выхода из проверки путем i<=sqrt(n1), но почему-то не выходит.
Подскажите, что не так и что здесь можно улучшить.
Заранее спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.01.2014, 21:05
Ответы с готовыми решениями:

Поиск всех простых чисел в заданном диапазоне
Необходимо разработать программу ,вычисляющую все простые числа в произвольном интервале. нужно...

Найти все пары дружественных чисел в заданном диапазоне
1.Дружественные числа -– это два натуральных числа, таких, что сумма всех делителей одного числа...

Найти все пары дружественных чисел, лежащих в заданном диапазоне
18. Даны натуральные числа n и m. Найти все пары дружественных чисел, лежащих в диапазоне от n до...

Найти все пары дружественных чисел, лежащих в заданном диапазоне
Помогите, пожалуйста. Даны натуральные числа n и t. Найти все пары дружественных чисел, лежащих в...

2
Псевдослучайный
1946 / 1145 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
27.01.2014, 22:14 2
Для поиска суммы делителей можно воспользоваться этим, будет весьма быстро.
1
923 / 639 / 198
Регистрация: 08.09.2013
Сообщений: 1,693
27.01.2014, 23:16 3
Тупым перебором справляется за 15 секунд. Но если миллион может превратиться в миллиард, то не обойтись без алгоритмов по ссылке NoMasters
Код ниже включает также поиск совершенных чисел, таких как 6. Если не нужно, исправьте.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#define N 1000001
 
main() {
  int i, n, d, s;
  static int fr[N];
  for (n=2; n < N; n++) {
    for (i= 2, s= 1; i <= (d= n / i); i++) if (!(n%i)) {
      if (d == i) s+= i;
      else s+= i + d;
      if (s >= N) { s=0; break; }
    }
    fr[n]= s;
  }
  for (n= 1; n < N; n++) if (fr[fr[n]] == n) {
    printf ("%d %d\n", n, fr[n]);
    fr[fr[n]]= 0;
  }
}
0
27.01.2014, 23:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.01.2014, 23:16
Помогаю со студенческими работами здесь

В заданном диапазоне найти все пары натуральных дружественных чисел, удовлетворяющих условию
Два натуральных числа называются дружественными, если каждое из них равно сумме всех натуральных...

Написать программу: Подсчитать факториалы всех чисел в заданном пользователем диапазоне
Подсчитать факториалы всех чисел в заданном пользователем диапазоне. Диапазон не должен превышать...

Написать программу, которая находит сумму всех целых нечетных чисел в заданном диапазоне
Написать программу, которая находит сумму всех целых нечетных чисел в диапазоне, указанном...

Нахождение всех дружественных чисел в заданном промежутке
Ребят, задача на дружественные числа, найти все др числа в промежутке Я написал код, но он...

Подсчитать количество всех чисел, лежащих в диапазоне от а до с в заданном массиве чисел
Подсчитать количество всех чисел, лежащих в диапазоне от а до с в заданном массиве чисел....

Посчитать сумму всех чисел в заданном диапазоне
Есть задание: Пользователь вводит две границы диапазона. Посчитать сумму всех чисел диапазона. ...


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

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