Страница 1 из 1

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

Добавлено: 23 дек 2013, 13:12
geh
Дано натуральное число и требуется определить
простое оно или составное? Написал программу
на 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

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

Добавлено: 23 дек 2013, 14:48
kiv
geh писал(а):Source of the post
Дано натуральное число и требуется определить
простое оно или составное?


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


Тест Миллера-Рабина

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

Добавлено: 23 дек 2013, 18:31
zykov
На wiki есть про это Primality test, правда только на английском.
Вобщем методов много придумали (для криптографии оно нужно). Но методы для 100% проверки все медленные. Зато есть более быстрые вероятностные алгоритмы. Там 100% гарантии нет, но с практической точки зрения они работают.

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

Добавлено: 24 дек 2013, 14:22
geh
Спасибо за подсказку. Но даже моя программа с небольшими изменениями
может работать как вероятностная. То есть она может определить не являются ли
делителями заданного числа первые сто миллионов простых чисел. Согласитесь,
после такой проверки, вероятность того, что число будет простым достаточно велика.
примечание:
не совсем понимаю зачем криптографии простые числа? Ведь получение случайных
(псевдослучайных) чисел и их использование в криптографии достаточно эффективно.

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

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

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

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

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

Добавлено: 24 дек 2013, 18:32
geh
Спасибо!! Вы дали хороший совет. Постараюсь им воспользоваться.
я был всегда уверен, что разбираюсь в криптографии, я сам открыл
шифр, и много позже узнал, что он был открыт до меня. Это так называемый
одноразовый шифр - его взломать даже теоретически нельзя. (я был так рад этому).

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

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


Ну хоть расшифровать-то можно?.... :whistle:

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

Добавлено: 24 дек 2013, 19:04
zykov

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

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