Форум программистов, компьютерный форум CyberForum.ru

Разбить целое число на простые множители с помощью рекурсивного алгоритма - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 37, средняя оценка - 4.95
lastProg
0 / 0 / 0
Регистрация: 17.11.2012
Сообщений: 22
17.11.2012, 03:40     Разбить целое число на простые множители с помощью рекурсивного алгоритма #1
Мне нужно разбить целое число на простые множители, этот алгоритм должен быть обязательно рекурсивным.. Помогите пожалуйста.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
17.11.2012, 08:23     Разбить целое число на простые множители с помощью рекурсивного алгоритма #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;
void rec(int a, int b)
{
    if(a==1)
        return;
    for(;;b++)
        if(a%b==0)
        {
            cout<<b<<endl;
            rec(a/b, b);
            return;
        }
}
int main()
{
    int a;
    cin>>a;
    rec(a, 2);   
   return 0;
}
lastProg
0 / 0 / 0
Регистрация: 17.11.2012
Сообщений: 22
17.11.2012, 14:57  [ТС]     Разбить целое число на простые множители с помощью рекурсивного алгоритма #3
Спасибо огромное, но не могу бы ты прокоментировать некоторые строки, я не совсем понимаю ихний смысл: 3, 6, 7, 11, 12, 19;
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
18.11.2012, 01:18     Разбить целое число на простые множители с помощью рекурсивного алгоритма #4
Цитата Сообщение от lastProg Посмотреть сообщение
но не могу бы ты прокоментировать некоторые строки, я не совсем понимаю ихний смысл: 3, 6, 7, 11, 12, 19;
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;
void rec(int a, int b)// рекурсивная функция называется rec. В параметрах функции передается 2 целых числа
{
    if(a==1)// если число a равно 1 (число a, которое передали в параметрах функции)
        return;// то возвращаемся туда, откуда вызывали рек. функцию
    for(;;b++)// продолжаем цикл, увеличивая значение b (цикл продолжается бесконечно)
        if(a%b==0)// если нашли число b которое без остатка делится на a
        {
            cout<<b<<endl;
            rec(a/b, b);// вызываем рек. функцию (в параметрах ей передаем a/b и b)
            return;// после того как программа отработает вызов рек. функции из предыдущей строки возвращаемся сюда. Здесь программа отрабатывает оператор return (возвращается в точку откуда была вызвана эта рек. функция)
        }
}
int main()
{
    int a;
    cin>>a;
    rec(a, 2);// вызываем рек. функцию (в параметрах передаем число введенное пользователем и число 2, первое простое число) 
   return 0;
}
Yandex
Объявления
18.11.2012, 01:18     Разбить целое число на простые множители с помощью рекурсивного алгоритма
Ответ Создать тему
Опции темы

Текущее время: 17:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru