Pull to refresh
7
0
Курдюкова Лина @kurduk

Пользователь

Send message

Алгоритм быстрее, чем просто перебор всех возможных делителей. Но ведь никто не запрещает взять мой алгоритм и способ с sqrt и объединить их. Будет еще быстрее.

Sub число()

Dim x As Long, y As Double, A As Long, a1 As Double, b As Long, c As Long, d As Double, d1 As Long, d2 As Double, d3 As Long, d4 As Double, d5 As Long, y1 As Long, y2 As Double, y3 As Long, y4 As Double, y5 As Long, W As Integer

 

x = 1

A = InputBox("Введите число")

a1 = A / 10

b = Fix(a1)

c = A - 10 * b

d = A / 3

d1 = Fix(d)

d2 = A / 7

d3 = Fix(d2)

d4 = A / 9

d5 = Fix(d4)

y = 10

y2 = 10

y4 = 10

W = 1

 

If c = 1 And d1 <> d And d2 <> d3 And d4 <> d5 Then

Do While y >= 0 Or y2 >= 0 Or y4 >= 0 And W = 1

y = (A - 21 - 70 * x) / (100 * x + 30)

y1 = Fix(y)

y2 = (A - 81 - 90 * x) / (100 * x + 90)

y3 = Fix(y2)

y4 = (A - 1 - 10 * x) / (100 * x + 10)

y5 = Fix(y4)

If y = y1 Or y2 = y3 Then W = 0

If y5 = y4 Then If y4 <> 0 Then W = 0

x = x + 1

Loop

Else:

End If

 

If c = 3 And d1 <> d And d2 <> d3 And d4 <> d5 Then

Do While y >= 0 Or y2 >= 0 And W = 1

y = (A - 3 - 30 * x) / (100 * x + 10)

y1 = Fix(y)

y2 = (A - 63 - 90 * x) / (100 * x + 70)

y3 = Fix(y2)

If y = y1 Or y2 = y3 Then W = 0

x = x + 1

Loop

Else:

End If

 

If c = 7 And d1 <> d And d2 <> d3 And d4 <> d5 Then

Do While y >= 0 Or y2 >= 0 And W = 1

y = (A - 7 - 70 * x) / (100 * x + 10)

y1 = Fix(y)

y2 = (A - 27 - 90 * x) / (100 * x + 30)

y3 = Fix(y2)

If y = y1 Or y2 = y3 Then W = 0

x = x + 1

Loop

Else:

End If

 

If c = 9 And d1 <> d And d2 <> d3 And d4 <> d5 Then

Do While y >= 0 Or y2 >= 0 Or y4 >= 0 And W = 1

y = (A - 9 - 90 * x) / (100 * x + 10)

y1 = Fix(y)

y2 = (A - 9 - 30 * x) / (100 * x + 30)

y3 = Fix(y2)

y4 = (A - 49 - 70 * x) / (100 * x + 70)

y5 = Fix(y4)

If y = y1 Or y2 = y3 Or y4 = y5 Then W = 0

x = x + 1

Loop

Else:

End If

 

If c = 2 Or c = 4 Or c = 6 Or c = 8 Or c = 0 Or c = 5 Or d = d1 Or d2 = d3 Or d4 = d5 Then W = 0

If A = 3 Or A = 5 Or А=2 or A = 7 Then W = 1

If A = 1 Then W = 0

If W = 1 Then MsgBox "число простое" Else: MsgBox "число составное"

End Sub

Я тоже считаю, что данный алгоритм считает быстрее как минимум в четыре раза, а может и больше, так как алгоритм не считает все возможные варианты при определении первого делителя.

Подвохов нет, так как вся суть в разделении на четыре группы, а остальное дело техники.

Расширять систему выше десятки не рационально, так как теряется вся суть метода, тем более, что он работает на каждом десятке числового ряда.

Это опечатка

Возможно мои познания в программировании, а над "длинной арифметикой" я подумаю на досуге.

Спасибо, исправила.

А кто-то ожидал чего то другого? Юр. лицам — льготы, а с простого населения три шкуры сдерут!
Чай, кофе, сахар, жир или еще чего там, главное чтоб в меру. При злоупотреблении можно умереть даже от воды.
Неофициальная история говорит, что на земле было более 5 цивилизаций, которые были уничтожены. Цивилизация не успевает вырасти до уровня межпланетной или межгалактической и погибает в результате какого то катаклизма. То есть парадокс Ферми не состоятелен?! А может быть цивилизация пала в результате агрессии со стороны инопланетян? Тогда получается подтверждение парадокса Ферми. Думаю для большинства людей это не принципиально, а вот перспектива вымереть, ведь в мире все циклично, должна людей беспокоить больше, чем наличие или отсутствие инопланетян!!!

Information

Rating
Does not participate
Location
Королев, Москва и Московская обл., Россия
Date of birth
Registered
Activity