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

Рекурсивный метод для разложения числа на множители

01.02.2014, 23:50. Показов 3787. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Разработать рекурсивный метод для вывода на экран всех возможных разложений натурального числа n на множители (без повторений). Например, для n=12 на экран должно быть выведено:
2*2*3=12
2*6=12
3*4=12

Помогите, пожалуйста...

Добавлено через 5 часов 44 минуты
Никак не получается, вот код, но он не работает должным образом, что то похожее есть но не до конца, помогите пожалуйста доработать

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
  class Program
    {
        static int x;
        static int b = 2;
        static void Main(string[] args)
        {
            Console.WriteLine("Введите n: ");
            x = Convert.ToInt32(Console.ReadLine());
            int a = b;
            rec(a);
 
            Console.ReadLine();
        }
 
 
        static void rec(int a)
        {
            int f = 1;
                int p=x;
                while (f!=x)
                {
                    while (p % a == 0)
                      {
                    Console.Write(a);
                    p /= a;
                    f *= a;
                    if (f != x)
                    {
                        Console.Write(" * ");
                    }
                       }
                    a++;
 
 
                }
                if (b < x)
                {
                    Console.WriteLine();
                    rec(++b);
                }
        }
    }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.02.2014, 23:50
Ответы с готовыми решениями:

Рекурсивный метод всех возможных разложений натурального числа n на множители
Разработать рекурсивный метод для вывода на экран всех возможных разложений натурального числа n на множители (без повторений). Например,...

Рекурсивный метод для перевода числа из десятичной системы счисления в двоичную
Разработать рекурсивный метод для перевода числа из десятичной системы счисления в двоичную.

Рекурсивный метод для вычисления количества цифр заданного натурального числа
4. Разработать рекурсивный метод, возвращающий значение: для вычисления количества цифр заданного натурального числа

1
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
02.02.2014, 04:19
Не стал разбираться, прошу меня простить, нашел на википедии простейший алгоритм факторизации, и записал его.
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
        static void Main(string[] args)
        {
            const int n = 12;
            var dividors = GetDividors(n);
            foreach (var dividor in dividors)
            {
                Console.WriteLine("{0} = {1}", dividor, n);
            }
        }
 
        private static IEnumerable<string> GetDividors(int n)
        {
            for (int i = 2; i*i < n; i++)
            {
                if (n%i != 0)
                    continue;
                yield return string.Format("{0}*{1}", n/i, i);
                var moreDivirors = GetDividors(n/i);
                foreach (string diviror in moreDivirors)
                {
                    yield return string.Format("{0}*{1}", diviror, i);
                }
            }
        }
Можно было бы возвращать IEnumerable IEnumerable'в вместо IEnumerable<string>, но мне показалось это излишним.

Добавлено через 3 минуты
Но если вдруг хочется:
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
    class Program
    {
        static void Main(string[] args)
        {
            const int n = 12;
            var dividors = GetDividors(n);
            foreach (var dividor in dividors)
            {
                Console.WriteLine("{0} = {1}", string.Join("*", dividor), n);
            }
        }
 
        private static IEnumerable<IEnumerable<int>> GetDividors(int n)
        {
            for (int i = 2; i*i < n; i++)
            {
                if (n%i != 0)
                    continue;
                yield return new[] {n/i, i};
                var moreDividors = GetDividors(n/i);
                foreach (var dividor in moreDividors)
                {
                    yield return dividor.Concat(new[] {i});
                }
            }
        }
    }
Добавлено через 8 минут
С точки производительности если рассматривать, можно взять с той же википедии оптимизацию, проходить только по нечетным (по тройкам не хочу делать, слишком усложнит код), тогда будет так:
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
        private static IEnumerable<IEnumerable<int>> GetDividors(int n)
        {
            foreach (var p in ReturnDividors(n, 2))
            {
                yield return p;
            }
            for (int i = 3; i*i < n; i += 2)
            {
                foreach (var p in ReturnDividors(n, i))
                    yield return p;
            }
        }
 
        private static IEnumerable<IEnumerable<int>> ReturnDividors(int n, int i)
        {
            if (n%i != 0)
                yield break;
            yield return new[] {n/i, i};
            var moreDividors = ReturnDividors(n/i, i);
            foreach (var dividor in moreDividors)
            {
                yield return dividor.Concat(new[] {i});
            }
        }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.02.2014, 04:19
Помогаю со студенческими работами здесь

Рекурсивный метод для вывода на экран всех делителей заданного натурального числа
Примечания: Разработка рекурсивных методов ( не возвращающих значений): 11. Разработать рекурсивный метод для вывода на экран всех...

Разработать рекурсивный метод для перевода числа из десятичной системы счисления в шестнадцатеричную
17. Разработать рекурсивный метод для перевода числа из десятичной системы счисления в шестнадцатеричную. Добавлено через 1 час 43...

Разработать рекурсивный метод для перевода числа из двоичной системы счисления в десятичную
Разработать рекурсивный метод для перевода числа из двоичной системы счисления в десятичную. с#

Разработать рекурсивный метод для вывода на экран всех возможных разложений натурального числа n на слагаемые
Разработать рекурсивный метод для вывода на экран всех возможных разложений натурального числа n на слагаемые (без повторений). Например,...

Рекурсивный и не рекурсивный метод написания кода
Объясните пожалуйста, чем отличаются два таких метода. Желательно с примерами.


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере 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
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru