Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
-44 / 2 / 3
Регистрация: 22.12.2015
Сообщений: 508

Количество натуральных делителей данного натурального числа

05.06.2019, 10:31. Показов 1735. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Собственно требуется найти количество натуральных делителей заданного натурального числа при помощи рекусрии. Без нее проблем нет.

Нашел код на паскале:
Pascal
1
2
3
4
5
6
7
8
9
10
11
function Count(n,k:integer):byte;
begin
if k=1 then Count:=1
else Count:=Count(n,k-1)+ord(n mod k=0);
end;
var n:integer;
begin
write('n=');
readln(n);
write('k=',Count(n,n));
end.
Перевел на php, но выводит дичь:
PHP
1
2
3
4
5
6
7
8
function f($n, $k)
            {
                if ($k == 1) return 1;
                else
                    return f($n, $k-1)+ord($n%$k == 0);
            }
            
            echo "<p>".f($n, $n)."</p>";
В чем может быть косяк? (как пример, для 15 выводит 148 делителей)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.06.2019, 10:31
Ответы с готовыми решениями:

Для данного натурального числа от 2 до 20 распечатайте количество его раз-личных разбиений на сумму натуральных
Для данного натурального числа от 2 до 20 распечатайте количество его раз-личных разбиений на сумму натуральных слагаемых. Например, для...

Подсчитать количество делителей данного натурального числа.
Нужно решить задания(Как можно проще...простые коды..(for,while,if,scanf,printf...)) 1)Подсчитать количество делителей данного...

Определить количество натуральных делителей данного числа
Дано натуральное двухзначное число. Определить количество натуральных делителей данного числа. ЗАРАНЕЕ СПАСИБО:) Добавлено через...

10
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
05.06.2019, 11:58
ord($n%$k == 0)
Тут какая-то дичь, как минимум потому что функция ord ожидает string, а не bool
0
-44 / 2 / 3
Регистрация: 22.12.2015
Сообщений: 508
05.06.2019, 12:04  [ТС]
Jewbacabra, я вот и не понял вообще смысл данного действия. Из-за этого скорее всего и не работает так, как надо.
С рекурсией вообще туго идет, сделать задание без нее - нет проблем, но с ней - жопс
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
05.06.2019, 13:41
рекурсией вообще туго идет, сделать задание без нее - нет проблем
Тут задача на цикл обычный цикл со счетчиком, который всегда можно представить в виде рекурсии, и какие действия внутри выполняются не принципиально. Но как побочный эффект таким функциям может понадобится фиктивный аргумент для хранения некоторых данных.
PHP
1
2
3
for ($i = 0; $i < 10; ++$i) {
    var_dump($i);
}
Эквивалентно
PHP
1
2
3
4
5
6
function f($i, $n) {
    if ($i === $n) return;
    var_dump($i);
    f($i+1, $n);
}
f(0, 10);
0
-44 / 2 / 3
Регистрация: 22.12.2015
Сообщений: 508
05.06.2019, 14:11  [ТС]
Jewbacabra, попробовал - 100 вложений, дальше вылетает, но выводит не то, что нужно

PHP
1
2
3
4
5
6
7
function f($i, $n) {
                if ($i === $n) return;
                var_dump($i);
                f($i+1, $n);
            }
            
            echo "<p>".f(0, $n)."</p>";
n из поля считывается
Миниатюры
Количество натуральных делителей данного натурального числа  
0
-44 / 2 / 3
Регистрация: 22.12.2015
Сообщений: 508
05.06.2019, 14:15  [ТС]
Ой блин, понял принял, еще проверку надо сделать на то, что число является делителем

Добавлено через 57 секунд
Только вот как это сделать в функции с рекурсией? В обычной то оно понятно. Плюс она же должна не выводить эти значения, а считать их количество
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
05.06.2019, 14:25
Imperion, все точно также как и с обычным циклом. Результат можно в возвращаемом значении передавать, или добавить для этого параметр
PHP
1
2
3
4
5
$count = 0;
for ($i = 1; $i <= 10; ++$i) {
    $count += $count % $i === 0 ? 1 : 0;
}
var_dump($count);
PHP
1
2
3
4
5
function count($i, $n) {
    if ($i === $n) return 1;
    return count($i + 1, $n) + $n % $i === 0 ? 1 : 0;
}
var_dump(count(1, 10));
0
-44 / 2 / 3
Регистрация: 22.12.2015
Сообщений: 508
05.06.2019, 14:47  [ТС]
Да елки палки.. Все равно не работает.. Пишет, что превышено 100 вхождение и досвидос.

P.S. И имя функции count - зарезервировано, я его поменял на count1
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
05.06.2019, 14:56
Imperion, https://ideone.com/kSwpvu
В функцию count1 должно передаваться именно два int, а не строки.
0
-44 / 2 / 3
Регистрация: 22.12.2015
Сообщений: 508
05.06.2019, 15:02  [ТС]
Jewbacabra, хрень какая-то, выводит int(0) и все, если ввожу 10 (даже если она введена статично и явно преобразована в int)
0
-44 / 2 / 3
Регистрация: 22.12.2015
Сообщений: 508
05.06.2019, 21:57  [ТС]
А ларчик просто открывался, нужно обернуть в скобки вот эту штуку $n % $i === 0 ? 1 : 0 и тогда все заработает)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.06.2019, 21:57
Помогаю со студенческими работами здесь

Сумма делителей данного натурального числа
Задание: Написать подпрограмму, которая вычисляет сумму делителей данного натурального числа Добавлено через 1 час 26 минут 24...

Получить все делители данного натурального числа, найти сумму делителей
Дано натуральное число получить все его делители, найти сумму его делителей

Используя процедуру нахождения количества натуральных делителей числа, определить у какого из трех чисел натуральных делителей больше
Используя процедуру нахождения количества натуральных делителей числа, определить у какого из трех чисел натуральных делителей больше

Используя процедуру нахождения количества натуральных делителей числа, определить у какого из трех чисел натуральных делителей больше
Используя процедуру нахождения количества натуральных делителей числа, определить у какого из трех чисел натуральных делителей больше

Составить программу, которая вычисляет количество S всех делителей и сумму Y всех делителей натурального числа N
1. Дано натуральное число N (N&lt;104). Составить программу, которая вычисляет количество S всех делителей и сумму Y всех делителей...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru