Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 22.10.2012
Сообщений: 95

Совершенные числа, вывод пятого числа

01.11.2015, 18:43. Показов 1217. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите упростить алгоритм вывода совершенных чисел
Есть код, он выводит первые 4 числа, чтобы высчитать 5 число, компьютеру нужно ~3 суток, помогите упростить программу, чтобы пятое число вывелось на экран, их нужно всего 5.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php 
for($n=2;$n<=2000000000;$n++) 
{ 
$f=1; 
$b=sqrt($n); 
for($i=2;$i<=$b;$i++) 
{ 
if($n % $i==0) 
$f=$f+$i+(int) ($n/$i); 
if ($f>$n) 
break; 
} 
if ($f==$n) 
echo $n, "\n"; 
} 
?>
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.11.2015, 18:43
Ответы с готовыми решениями:

Найти все совершенные числа
Помогите пожалуйста решить задачу. Не могу понять, почему не работает. Найти все совершенные числа, меньше 100000 (натуральное число...

Найти совершенные числа меньше 100000
Найти все совершенные числа, меньше 100000 (натуральное число называется совершенным, если оно равно сумме своих делителей, включая 1 и...

Составить блок-схему: Напечатать все совершенные числа до заданного числа N
Здравствуйте. Помогите пожалуйста составить блок-схемы к задачам. Завтра зачет, без вариантов надо сдать. Обещаюсь научиться всему в...

5
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
01.11.2015, 19:12
Цитата Сообщение от PilotDrowa Посмотреть сообщение
их нужно всего 5.
PHP
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
<?php
function isPrime ($num)
{
    if ($num <=1)
        return false;
    else if ($num == 2)         
        return true;
    else if ($num % 2 == 0)
        return false;
    else
    {
        $prime = true;
        $divisor = 3;
        $upperLimit = (int)sqrt($num) + 1;
        
        while ($divisor <= $upperLimit)
        {
            if ($num % $divisor == 0)
                $prime = false;
            $divisor +=2;
        }
        return $prime;
    }
}
 
echo "<p>Prime numbers:</p>\n<ul>";
for ($i = 0; $i < 1000; ++$i)
    if (isPrime($i))
        echo "\t<li>".$i."</li>\n";
echo "</ul>\n";
Вот проверяются числа от 0 до 1000, у меня выполняется за мгновение.
0
0 / 0 / 0
Регистрация: 22.10.2012
Сообщений: 95
01.11.2015, 19:43  [ТС]
Я извиняюсь, но это не совершенные числа
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
01.11.2015, 20:10
PilotDrowa, упс, извиняюсь. Я почему то подумал про простые числа...
0
0 / 0 / 0
Регистрация: 22.10.2012
Сообщений: 95
01.11.2015, 21:39  [ТС]
Я тут придумал, можно программу разбить на две части
в первой выводит из промежутка от 2 до 10000
во второй части выводит от 33550330 до 33550337
не знаю, как реализовать
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
01.11.2015, 21:54
Цитата Сообщение от PilotDrowa Посмотреть сообщение
Я тут придумал, можно программу разбить на две части
в первой выводит из промежутка от 2 до 10000
во второй части выводит от 33550330 до 33550337
Ну это при условии что Вы знаете первые 5 совершенных чисел. С тем же условием можно вообще ничего не делать, просто вывести их через echo

Вот немного упростил вроде как, но все равно очень долго. Четвертое число за 6 секунд находит, пятого числа я не дождался
PHP
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
<?php
$start = time();
 
function isPerfect($number)
{
    $sum = 0;
    for($i = 1; $i < $number; $i++)
    {
        if($number % $i == 0)
            $sum += $i;
    }
    return $sum == $number;
}
 
$c = 4; // количество совершенных чисел
 
printf("First %d perfect numbers:".PHP_EOL, $c);
$i = 1; // число с которого начинаем
while ($c > 0)
{
    if (isPerfect($i))
    {
        echo $i.PHP_EOL;
        $c--;
    }
    $i++;
}
$time = time() - $start;
printf("Duration: %d seconds.".PHP_EOL, $time);
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.11.2015, 21:54
Помогаю со студенческими работами здесь

Процедуры и функции: Получить совершенные числа, меньше заданного числа n
Привет всем, прошу помочь написать программу. Получить совершенные числа, меньше заданного числа n. Использовать функцию распознавания...

Для заданного натурального числа N вывести в столбик все совершенные числа меньшие N c++
Для заданного натурального числа N вывести в столбик все совершенные числа меньшие N. Совершенное число – натуральное число, которое равно...

Напечатать все совершенные числа меньшие заданного числа N
Натуральное число M называется совершенным, если оно равно сумме всех своих делителей, включая 1, но исключая себя. Напечатать все...

Напечатать все совершенные числа, меньшие заданного числа N
Натуральное число M называется совершенным, если оно равно сумме всех своих делителей, включая 1, но исключая себя. Напечатать все...

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
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, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru