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

Необходимо реализовать алгоритм Полларда (алгортим факторизации числа n)

22.09.2012, 10:19. Показов 5322. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток)
Необходимо реализовать алгоритм Полларда (алгортим факторизации числа n).
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
 public partial class Form1 : Form
    {   
    int n;
        int nd = 0;
        public Form1()
        {
            InitializeComponent();
        }
 
        int gcd(int a, int b)
        {
            while (b != 0)
                b = a % (a = b);
                return a;
        }
     
        Point plrd(int n)
 
    {
        int p = 0;
        int q = 0;
            Random rnd = new Random();
        int x0 = rnd.Next(2, n);
        int k = 0;
        //M = n;
        int[] x = new int[200];
        for (k = 1; nd<n; ++k)
        {
            x[k] = ((x0) * (x0) + 1) % n;
            x0 = x[k];
            if (k % 2 == 0)
            {
                int j = k / 2;
                nd = gcd(n, Math.Abs(x[k] - x[j]));
                if (nd != 1)
                {
                    if (nd < n)
                    {
                        p = nd;
                        q = n / p;
                        Point a = new Point(p, q);
                        return a;
 
                    }
                    else
                    {
                        plrd(n);
                    }
                }
 
            }
        }
        return new Point();
    }
 
        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                n = Convert.ToInt32(textBox1.Text);
 
            }
            catch
            {
                MessageBox.Show("Введите корректное значение", "Error!");
            }
 
          Point c =  plrd(n);
          int p = c.X;
          int q = c.Y;
          MessageBox.Show(Convert.ToString(p));
          MessageBox.Show(Convert.ToString(q));
 
        }
Дело в том, что не всегда удается получить корректные значения p и q. Например, при n=4, при n=10.
Помогите разобраться
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.09.2012, 10:19
Ответы с готовыми решениями:

Метод факторизации Полларда (p-1)
Весь форум облазил но не нашёл, пришлось зарегаться. Очень нужно реализовать в Pascal ABC метод факторизации Полларда (p-1) по данному...

Нужно реализовать Ро-алгоритм Полларда
Ребят вообщем нужно реализовать этот алгоритм.. Но что то я не пойму как... Нужно разложить число 248713. Должны получится...

Необходимо реализовать алгоритм
Не удается получить графики по приведенному алгоритму. Первая ошибка в присвоении coord(N) и дальше сплошные проблемы.

4
Master of Orion
Эксперт .NET
 Аватар для Psilon
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
23.09.2012, 01:41 2
ro0t,
C#
1
 b = a % (a = b);
а разве шарп вообще такое ест? Какая-то сишная запись
0
6 / 6 / 1
Регистрация: 21.09.2012
Сообщений: 12
23.09.2012, 22:46 3
Цитата Сообщение от Psilon Посмотреть сообщение
ro0t,
C#
1
 b = a % (a = b);
а разве шарп вообще такое ест? Какая-то сишная запись
все ок, красивое вычисление НОД
я бы перебросил
int nd = 0;
внутрь метода plrd
это правда не решает всех проблем
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
23.09.2012, 22:48 4
escapist, нет, я в курсе, что в С такое можно записать, но я думал, что кроме return (a=b) он такое не любит. А то в цикле когда я пробовал вещи типа
C#
1
while((a=a.Next) != null)
он ругался
0
6 / 6 / 1
Регистрация: 21.09.2012
Сообщений: 12
24.09.2012, 01:18 5
Цитата Сообщение от Psilon Посмотреть сообщение
escapist, нет, я в курсе, что в С такое можно записать, но я думал, что кроме return (a=b) он такое не любит. А то в цикле когда я пробовал вещи типа
C#
1
while((a=a.Next) != null)
он ругался
вот мой коротенький примерчик для установления разницы между & и && :

C#
1
 bool a ; Console.WriteLine((a=false) & (a = true) ? true : a);


Добавлено через 12 минут
Не силен в алгоритме Полларда и у меня нет уверенности, что он всегда может найти множители непростого числа. Т.е. без повторных прогонов. Но если его повторять, то когда следует остановиться и решить, что число простое?

вот мой вариант без использования массивов (но проблема остается):

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
91
92
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace Pillard
{
    public partial class Form1 : Form
    {
        int n;
        int z = 0;
 
        public Form1()
        {
            InitializeComponent();
        }
        int gcd(int a, int b)
        {
            while (b != 0)
                b = a % (a = b);
            return a;
        }
 
        Point plrd(int n)
        {
            int i = 1;
            int nd = 0;
            int p = 0;
            int q = 0;
            Random rnd = new Random();
            int x0 = rnd.Next(2, n);
            int k = 2;
            int x = x0;
            while (true)
            {
                i++;
                x = (x*x + 1) % n;
                    int xx = Math.Abs(x0 - x);
                    nd = gcd(n,xx);
                    if (nd != 1)
                    {
                        if (nd < n)
                        {
                            p = nd;
                            q = n / p;
                            Point a = new Point(p, q);
    
                            return a;
 
                        }
                        else
                        {
                            return new Point();
                          //return plrd(n);
                        }
                    }
                    if (i==k)
                    {
                        x0 = x;
                        k *= 2;
                    }
             
            }
    
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                n = Convert.ToInt32(textBox1.Text);
 
            }
            catch
            {
                MessageBox.Show("Введите корректное значение", "Error!");
            }
 
            Point c = plrd(n);
            int p = c.X;
            int q = c.Y;
            MessageBox.Show(Convert.ToString(p));
            MessageBox.Show(Convert.ToString(q));
 
        }
 
    }
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.09.2012, 01:18
Помогаю со студенческими работами здесь

Необходимо реализовать алгоритм в Маткаде
Здравствуйте, в Маткаде практически не работал, но вот пришлось с ним познакомиться поближе. Суть задания - запрограммировать элементарную...

Необходимо реализовать расширенный алгоритм Евклида
Добрый вечер человеки! Необходимо реализовать расширенный алгоритм Евклида.Имеется реализованный код на Паскале,но что то не получается...

Алгоритм факторизации. Курсач горит
Здравствуйте. У меня такая проблема: Я делаю курсовую, называется &quot;Вычисление дискретного логарифма&quot;. Я написал уже всю...

Реализовать алгоритм обмена ключами по схеме Диффи-Хеллмана
Заранее благодарен

ро-метод Полларда (факторизация числа)
Доброго времени суток! Необходимо написать ро-алгоритм Полларда. Взял Кнута с его &quot;Искусство программирования&quot;, реализовал. Но...


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

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

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
Winforstrap или красявый дизайн своими руками на HTML+JS+Winform­s
anomal6 04.03.2025
Сидел тут вечером ковырял проект на MAUI, и как же глупо создаются пакеты MSIX и система обновлений пакета публикации, но не об этом. Бывает нужен современный дизайн программы а писать на MAUI,. . .
Формат данных для симуляции физики, посредством распространённы­­­­­­­х не обученных моделей.
Hrethgir 04.03.2025
Что-то как-то снова потерялось, зато катангенсы закатангесились в одном сообщении. На днях писал, что планирую для работы апгрейдить (на этот раз удачно) девайс для работы (конкретно - здоровья для,. . .
Концепция variadic
CoderHuligan 04.03.2025
Мне не очень нравится (а кому это нравится?) что у нас есть отдельно компилятор, отдельно линковщик, причем со своим собственным командным языком. При этом усложнении надо знать помимо языка. . .
Java Record или Kotlin Data Class: что лучше для неизменяемых данных
Wired 04.03.2025
Java Record и Kotlin Data Class — два мощных инструмента для обуздания неизменяемых структур данных, каждый со своим уникальным подходом к решению этой задачи. История их появления весьма. . .
Создание производительны­­­х API с Java и gRPC
Wired 04.03.2025
В мире микросервисной разработки вопрос производительности часто становится краеугольным камнем. И хотя REST API давно завоевал сердца разработчиков своей простотой и интуитивностью, при высоких. . .
Что нового в JDK 24
Wired 04.03.2025
JDK 24 — это настоящий прорыв в эволюции Java, который кардинально меняет правила игры. В этом релизе разработчики Oracle наконец-то довели до ума множество критически важных улучшений в. . .
Разработка блокчейн с использованием Java: смарт-контракты и dApp
Wired 04.03.2025
Погружаясь в мир блокчейн-разработки на Java, разработчик получает доступ к внушительному арсеналу инструментов. В отличие от Solidity, который "заперт" в экосистеме Ethereum, Java предоставляет. . .
WebAssembly в Kubernetes
stackOverflow 03.03.2025
В современной экосистеме облачных технологий WebAssembly (Wasm) становится все более значимым компонентом, предлагая уникальный подход к выполнению кода в распределенных системах. Эта технология. . .
GitHub Actions или Jenkins: Выбираем CI/CD платформу
stackOverflow 03.03.2025
Непрерывная интеграция и развертывание (CI/ CD) изменили подход к разработке программного обеспечения, превратив его в бесшовный процесс от написания кода до развертывания в продакшн. GitHub Actions и. . .
Автоматизация тестирования Pull Request в Kubernetes: Интеграция с GitHub Actions и GKE
stackOverflow 03.03.2025
Масштабные проекты с использованием Kubernetes требуют надежной системы тестирования изменений перед их внедрением в продакшн-среду. Традиционный подход с ручной проверкой Pull Request не справляется. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru