VB. Число простое или нет?

geh
Сообщений: 224
Зарегистрирован: 09 дек 2013, 21:00

VB. Число простое или нет?

Сообщение geh » 23 дек 2013, 13:12

Дано натуральное число и требуется определить
простое оно или составное? Написал программу
на Visual Basic. Дал форме имя frmM и поместил
на ней однострочное текстовое окно под именем
Txt. Итак программа работает если происходит
событие: изменение содержимого окна. Когда
программа определяет, что нашла простое число
она меняет цвет шрифта этого числа с черного на
красный. Программа проверена и работает с числами
длинной до 16-ти знаков.
Впрочем, если добавить немного кода, то программа
будет работать с числами любой длины. Но долго.
чем больше число, тем больше ждать, когда программа
его обработает.Я могу увеличить скорость раза в 1,5, но
не более того.
Вопрос:
Существует ли алгоритм, который бы позволил кардинально
увеличить скорость программы.

Код: Выбрать все

Option Explicit

Private Sub Txt_Change()
   Dim P As Long, i As Long, j As Long, D As Long
   Dim sS As String, sA As String, sB As String
   Dim nBB(6) As integer
   Dim nA As Long, nR As Long
  
   If Txt.Text=""Then Goto 777
   sS=Txt.Text
   Txt.Visible=False
   frmM.Refresh
  
   If Len(sS)<10 Then Goto 333   sA=Left$(sS,9)   sB=Right$(sS,Len(sS)-9)   nA=Val(sA)   For i=0 To 6      nBB(i)=Val(Mid$(sB,i+1,1)   Next i   If (nBB(Len(sS)-10) Mod 2)=0 Then Goto 555   D=Fix(Sqr(Val(sS)))+1   For i=3 To D Step 2      nR=nA Mod i      For j=0 To Len(sS)-10         nR=(10*nR+nBB(j)) Mod i      Next j      If nR=0 Then Goto 555   Next i   Txt.ForeColor=vbRed   Goto 777333:   P=Val(sS)   If (P=2) Or (P=3) Or (P=5) Or (P=7) Then      Txt.ForeColor=vbRed: Goto 777   End If   If (P=1) Or (P Mod 2=0) Then      Txt.ForeColor=vbBlack: Goto 555   End If   D=Fix(Sqr(P))+1   For i=3 To D Step 2      If P Mod i = 0 Then Goto 555   Next i   Txt.ForeColor=vbRed: Goto 777555:   Txt.ForeColor=vbBlack777:   Txt.Visible=TrueEnd Sub
Последний раз редактировалось geh 28 ноя 2019, 06:38, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
kiv
Сообщений: 1012
Зарегистрирован: 02 дек 2011, 21:00

VB. Число простое или нет?

Сообщение kiv » 23 дек 2013, 14:48

geh писал(а):Source of the post
Дано натуральное число и требуется определить
простое оно или составное?


Существует ли алгоритм, который бы позволил кардинально
увеличить скорость программы.


Тест Миллера-Рабина
Последний раз редактировалось kiv 28 ноя 2019, 06:38, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
zykov
Сообщений: 1777
Зарегистрирован: 02 ноя 2009, 21:00

VB. Число простое или нет?

Сообщение zykov » 23 дек 2013, 18:31

На wiki есть про это Primality test, правда только на английском.
Вобщем методов много придумали (для криптографии оно нужно). Но методы для 100% проверки все медленные. Зато есть более быстрые вероятностные алгоритмы. Там 100% гарантии нет, но с практической точки зрения они работают.
Последний раз редактировалось zykov 28 ноя 2019, 06:38, всего редактировалось 1 раз.
Причина: test

geh
Сообщений: 224
Зарегистрирован: 09 дек 2013, 21:00

VB. Число простое или нет?

Сообщение geh » 24 дек 2013, 14:22

Спасибо за подсказку. Но даже моя программа с небольшими изменениями
может работать как вероятностная. То есть она может определить не являются ли
делителями заданного числа первые сто миллионов простых чисел. Согласитесь,
после такой проверки, вероятность того, что число будет простым достаточно велика.
примечание:
не совсем понимаю зачем криптографии простые числа? Ведь получение случайных
(псевдослучайных) чисел и их использование в криптографии достаточно эффективно.
Последний раз редактировалось geh 28 ноя 2019, 06:38, всего редактировалось 1 раз.
Причина: test

Sonic86
Сообщений: 1774
Зарегистрирован: 03 мар 2011, 21:00

VB. Число простое или нет?

Сообщение Sonic86 » 24 дек 2013, 15:08

Дано натуральное число и требуется определить
простое оно или составное?
не совсем понимаю зачем криптографии простые числа? Ведь получение случайных
(псевдослучайных) чисел и их использование в криптографии достаточно эффективно.

geh, я вот сильно извиняюсь, но Вы пробовали открывать книги по криптографии, по теории чисел, гуглить в конце-концов. Все вопросы ведь стандартные и ответы на них и на многие другие вопросы есть в книгах в существенно более полном варианте, чем Вам напишут на форумах.

zykov писал(а):Source of the post Но методы для 100% проверки все медленные.
Ну есть сильно медленные, есть менее медленные, есть более-менее нормальные, опирающиеся на всяческие обобщения гипотезы Римана, которая на практике верна.
Последний раз редактировалось Sonic86 28 ноя 2019, 06:38, всего редактировалось 1 раз.
Причина: test

geh
Сообщений: 224
Зарегистрирован: 09 дек 2013, 21:00

VB. Число простое или нет?

Сообщение geh » 24 дек 2013, 18:32

Спасибо!! Вы дали хороший совет. Постараюсь им воспользоваться.
я был всегда уверен, что разбираюсь в криптографии, я сам открыл
шифр, и много позже узнал, что он был открыт до меня. Это так называемый
одноразовый шифр - его взломать даже теоретически нельзя. (я был так рад этому).
Последний раз редактировалось geh 28 ноя 2019, 06:38, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
kiv
Сообщений: 1012
Зарегистрирован: 02 дек 2011, 21:00

VB. Число простое или нет?

Сообщение kiv » 24 дек 2013, 18:51

geh писал(а):Source of the post
Это так называемый одноразовый шифр - его взломать даже теоретически нельзя. (я был так рад этому).


Ну хоть расшифровать-то можно?.... :whistle:
Последний раз редактировалось kiv 28 ноя 2019, 06:38, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
zykov
Сообщений: 1777
Зарегистрирован: 02 ноя 2009, 21:00

VB. Число простое или нет?

Сообщение zykov » 24 дек 2013, 19:04

Последний раз редактировалось zykov 28 ноя 2019, 06:38, всего редактировалось 1 раз.
Причина: test

geh
Сообщений: 224
Зарегистрирован: 09 дек 2013, 21:00

VB. Число простое или нет?

Сообщение geh » 26 дек 2013, 15:45

Текст зашифрованный одноразовым шифром расшифровать нельзя.
Действительно, возьмите текст (числовой текст) и возьмите случайное
число такой же длины как текст (пробелы тоже шифруются) и далее
сложите каждую цифру текста с каждой цифрой случайного числа по
модулю 10. Полученное число (зашифрованный текст) тоже будет СЛУЧАЙНЫМ ЧИСЛОМ.
разве можно расшифровать Случайное число?? Нет!
Последний раз редактировалось geh 28 ноя 2019, 06:38, всего редактировалось 1 раз.
Причина: test


Вернуться в «Computer Science»

Кто сейчас на форуме

Количество пользователей, которые сейчас просматривают этот форум: нет зарегистрированных пользователей и 2 гостей