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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Перевести wchar в char http://www.cyberforum.ru/cpp-beginners/thread27575.html
Здравствуйте! Подскажите как перевести wchar в char? (MS Visual C++)
C++ Задача на динам. массивы, очереди, спискиБ командная строка Надо: Создать динамический массив и очередь (в виде линейного списка рядков, которые вводятся с клавиатуры). Количество рядков и предельная их длина задаются в командной строке. Отсортировать рядки... http://www.cyberforum.ru/cpp-beginners/thread27565.html
C++ Таблица синусов для значений аргумента в диапазоне от 0 до π/2 с заданным числом шагов
1.Используя циклы while, do - while и for, написать три варианта программы получения на экране таблицы синусов для значений аргумента в диапазоне от 0 до π/2 с заданным числом шагов. 2....
C++ Создать класс – вектор
Помогите решить задачу... Создайте класс – вектор (в пространстве Rn ). Класс должен содержать поинтер к типу long double и количество координат точки. Определите функции: инициализации...
C++ Создание структуры. http://www.cyberforum.ru/cpp-beginners/thread27529.html
Помогите разобраться с задачей.. Создайте структуру – vector. Структура должна содержать поинтер к типу long double и число координат точки. Определите функции: инициализации (посредством...
C++ Функция рассчета определенного интеграла. (Передача функции как аргумента) Есть функция пределенная как: float integrall(float (*argFunc)(float x) , float argTmin, float argTmax, float argStep=1) Если ей в качестве аргумента передать функцию, которая является членом... подробнее

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

Добавлено через 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
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru