Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 26.03.2009
Сообщений: 5
1

Простые сомножители

26.03.2009, 19:11. Показов 2572. Ответов 4
Метки нет (Все метки)

Привет всем тут такой вопрос:
Задача сосит в следуюшел Простые сомножители. Любое натуральное число может быть единственным образом разложено на простые сомножители. Напишите программу для выполнения такого разложения всех натуральных чисел от N1 до N2 с использованием рекурсивной программы. Вродибы просто но что то не получается организовать наведите на путь истины)))))))))))

Добавлено через 8 минут 10 секунд
С++/DOS
0

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

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.03.2009, 19:11
Ответы с готовыми решениями:

Простые сомножители
Любое натуральное число может быть единственным образом разложено на простые сомножители. Напишите...

Вынести общие сомножители из суммы
Вынести общие сомножители (переменные и константы) из суммы программа должна вводить и печатать...

Как научиться создавать на C++ простые приложения (очень простые игры)?
Помогите, я хочу научится создавать какието для начала очень простые игры, приложения. но я вооще...

Задача про простые числа. Выпишите все простые числа, находящиеся в интервале между а и б
#include <stdio.h> #include <iostream> #include <conio.h> #include <math.h> using std::cout;...

4
97 / 53 / 3
Регистрация: 18.03.2009
Сообщений: 273
26.03.2009, 19:41 2
Код в студию! Тогда и разберемся, почему не получается
0
0 / 0 / 0
Регистрация: 26.03.2009
Сообщений: 5
26.03.2009, 19:42  [ТС] 3
я бы дал код но я незнаю с чего начать вот и прошу подсказать)
0
97 / 53 / 3
Регистрация: 18.03.2009
Сообщений: 273
26.03.2009, 19:53 4
Есть такая идея:
Создать функцию для разложения числа на два сомножителя. Далее рекурсивно передавать в эту функцию результаты разложения. В случае, если разложить полученное число уже невозможно, выводить его на экран (то есть добрались до простого сомножителя) и осуществлять выход из функции. Возможность разложения проверять функцией нахождения остатка от деления.

Код пока написать не могу, компилятор не под рукой
0
0 / 0 / 0
Регистрация: 26.03.2009
Сообщений: 5
26.03.2009, 21:15  [ТС] 5
спс большое буду пробовать если сможешь потом напиши код) когда сделаю если получится сам скину !!! еще раз спасибо

Добавлено через 1 час 17 минут 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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
using System;
using System.Collections.Generic;
using System.Text;
 
namespace KultiHELL
{
    class Ferma
    {
        private Int32[] factors;    // Массив в который будут писацца множители
        private Int16 next = 1;     // Следующий индекс массива
 
        public Int32[] Factoring(Int32 n)
        {
            Int16 i_max = (Int16)Math.Floor(Math.Log(n, 2)); // Максимальное колво множителей
            factors = new Int32[i_max+1];
            factors[0] = n;
            int i = 0;
            Boolean exit = false;
 
            while(!exit)
            {
                if ((factors[next] = FermaMetod(ref factors[i])) != 0) // Если разложилось, то
                    next++;             // пробуем разложить число на том же индексе
                else                    // Если число простое, то можно брать следующее
                    if (++i == i_max)   // Если весь массив "заполнен", то выходим
                        exit = true;
            }
            int newSize = 0;
            for(;newSize == 0;i--)                      // Уменьшаем индекс, как только найдем ненулевой
                if (factors[i] != 0) newSize = i + 1;   // элемент пербор будет закончен
 
            Array.Resize<Int32>(ref factors, newSize);  // Обрезаем нули
            Array.Sort(factors);                        // Сортируем в порядке возрастания
            return factors;
        }
        private Int32 FermaMetod(ref Int32 n)
        {   // Метод Ферма. Смотри описание в "Description.pdf"
 
            if (n <= 2 )
                return 0;
            if (n == 2 * (n / 2)) // Проверка на четность
            {
                n = n / 2;
                return 2;
            }
            Int32 x = 1 + 2 * Convert.ToInt32(Math.Floor(Math.Sqrt(n)));
            Int32 y = 1;
            Int32 r = Convert.ToInt32(Math.Pow(Math.Floor(Math.Sqrt(n)), 2)) - n;
            Int32 q = (Int32)n / 2;
 
            Boolean exit = false;
            Byte state = 2;
            while (!exit)
            {
                switch (state)
                {
                    case 2:
                        if (r <= 0)
                            state = 4;
                        else
                            state = 3;
                        break;
                    case 3:
                        r -= y;
                        y += 2;
                        if (y > q)
                            return 0;   // Возвращаем ноль, если число простое.
                        else
                            state = 2;
                        break;
                    case 4:
                        if (r == 0)
                            exit = true; // Найдены сомножители!
                        else
                        {
                            r += x;
                            x += 2;
                            state = 3;
                        }
                        break;
                }
            }
 
            // Возвращаем первый сомножитель, а через ссылку второй.
            n = (x - y) / 2;
            return (x + y - 2) / 2;
        }
 
    }
}
для решения задачи:
Простые сомножители. Любое натуральное число может быть единственным образом разложено на простые сомножители. Напишите программу для выполнения такого разложения всех натуральных чисел от N1 до N2 с использованием рекурсивной программы. Только без рекурсии
Кто может помоч этот код перевести в C++/DOS
Буду очень благодарен
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.03.2009, 21:15

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

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

Разложение числа на простые сомножители
Доказать, что в разложении числа n! на простые сомножители простое число p входит с показателем ...

Разложения числа на простые сомножители
здравствуйте,помогите пожалуйста решить пример по дискретной математике:Найти разложение числа...

Найти разложение числа на простые сомножители
Найти размножение числа на простые сомножители 7844067

Найти разложение числа на простые сомножители
Доброго времени суток вам друзья . разложение числа 1945944 на простые сомножители

Получить каноническое разложение числа на простые сомножители
Получить каноническое разложение числа на простые сомножители


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.