Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Алгоритм Евклида.... Добавлено: 10.06.10 12:05  

Автор вопроса:  Алексей
Всем привет еще раз...
Даны 3 вещественные числа, N1,N2,N3 найти общие делители для этих чисел. Если таких не имеется, то найти делители для N1,N2 или для N2,N3 или для N1,N3. у меня не большая загвоздка
Код:
Dim N1 As Integer
Dim N2 As Integer
Dim N3 As Integer
Dim s As Integer
Dim i As Integer
Private Sub Dano_Click()
N1 = InputBox("Введите 1 число")
N2 = InputBox("Введите 2 число")
N3 = InputBox("Введите 3 число")
End Sub
Private Sub Otvet_Click()
s = 0
Text1.Text = "Делители чисел (" + Str(N1) + ";" + Str(N2) + ";" + Str(N3) + ") :"

For i = 2 To 100

If N1 \ i = N1 / i And N2 \ i = N2 / i And N3 \ i = N3 / i Then s = s + 1: Text1.Text = Text1.Text + Str(i) + ";"
Next i
If s = 0 Then GoTo 10 Else GoTo 20
10 Text2.Text = "Делители чисел (" + Str(N1) + "и" + Str(N2) + ") :на"
Text3.Text = "Делители чисел (" + Str(N1) + "и" + Str(N3) + ") :на"
Text4.Text = "Делители чисел (" + Str(N2) + "и" + Str(N3) + ") :на"
For i = 2 To 100
If N1 \ i = N1 / i And N2 \ i = N2 / i Then Text2.Text = Text2.Text + Str(i) + ";"
If N1 \ i = N1 / i And N3 \ i = N3 / i Then Text3.Text = Text3.Text + Str(i) + ";"
If N2 \ i = N2 / i And N3 \ i = N3 / i Then Text4.Text = Text4.Text + Str(i) + ";"
Next i
20
End Sub


Как сделать так что бы у меня делители были от 2 до бесконечности?
я задаю маленькие числа (9.6.3) VB показывает решение,но как большие(60000000 или 9000000....) просто вы дает ошибку .
Помогите разобраться!

Ответить

  Ответы Всего ответов: 2  

Номер ответа: 1
Автор ответа:
 AWP



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #1
Добавлено: 10.06.10 14:59
  1. Dim N1 As long
  2. Dim N2 As long
  3. Dim N3 As long
  4. Dim s As long
  5. Dim i As long
и
  1. For i = 2 To 100 ' не до ста, а до "много"

Ответить

Номер ответа: 2
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #2
Добавлено: 10.06.10 15:05
В коде явно не алгоритм Евклида. Нужно что-то вроде:
  1. function gcd(a, b)
  2.     do while a <> 0 && b <> 0
  3.         if a > b then a = a mod b
  4.         else b = b mod a
  5.     loop
  6.     gcd = a + b
  7. end function
  8.  
  9. dim res(4) : res(1) = gcd(gcd(n1,n2),n3) : res(2) = gcd(n1,n2) : res(3) = gcd(n1,n3) : res(4) = gcd(n2,n3)
  10. result = res(1)
  11. for i = 2 to 4 : if res(i) > result then result = res(i) : next

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам