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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
toshiba
0 / 0 / 0
Регистрация: 26.03.2009
Сообщений: 5
#1

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

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

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

Добавлено через 8 минут 10 секунд
С++/DOS
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.03.2009, 19:11
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Простые сомножители (C++):

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

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

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

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

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

простые - C++
Требуется найти колличество простых чисел до 10000. А потом определить является ли число этих чисел (звучит то как)))) простым. В чем...

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

Код пока написать не могу, компилятор не под рукой
0
toshiba
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.03.2009, 21:15
Привет! Вот еще темы с ответами:

простые сортировки - C++
В первой строке входного файла input.txt записано число N (количество чисел, N&lt;= 1000), затем идут N целых чисел. В файл output.txt...

простые числа - C++
Дана последовательность натуральных чисел длины n. Вычислить сумму тех из них, которые – простые числа.

Простые циклы - C++
Доброй ночи. Я никак не могу разобратся в циклах: Напечатать таблицу значений функций y=pow(x,2), y=pow(x,3) y=pow(x,1/2) для целых...

Простые циклы с++ - C++
Ребят, помогите прогу написать по заданию, пожалуйста.


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
26.03.2009, 21:15
Ответ Создать тему
Опции темы

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