-Поиск по дневнику

Поиск сообщений в rss_forum_sources_ru

 -Подписка по e-mail

 

 -Постоянные читатели

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 29.07.2007
Записей:
Комментариев:
Написано: 80


Поиск минимального числа при условии

Среда, 08 Июля 2020 г. 13:51 + в цитатник
m-ch: Реализация на VBA:
Вычисление НОК на базе НОД

    Sub main()
    Dim arr, x, myLCD As Double
    arr = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12) 'массив значений
    myLCD = 1
    For Each x In arr
    myLCD = myLCD * x / myGCD(myLCD, x)
    Next
    Debug.Print myLCD 'наименьшее общее кратное
    End Sub
    Sub main2()
    Dim arr, x, myLCD As Double
    arr = Array(2, 3, 17, 4, 3, 3)
    myLCD = 1
    For Each x In arr
    myLCD = myLCD * x / myGCD(myLCD, x)
    Next
    Debug.Print myLCD 'наименьшее общее кратное
    End Sub
    Sub main3()
    Dim arr, x, myLCD As Double
    arr = Array(17, 19, 23, 29, 31, 37, 41, 43, 47, 53)
    myLCD = 1
    For Each x In arr
    myLCD = myLCD * x / myGCD(myLCD, x)
    Next
    Debug.Print myLCD 'наименьшее общее кратное
    End Sub
    Function myGCD(ByVal a As Double, ByVal b As Double) As Double 'функция расчета наибольшего общего делителя
    Dim t As Double
    If a < b Then t = a: a = b: b = t
    While b
    t = b
    b = myMOD(a, b)
    a = t
    Wend
    myGCD = a
    End Function
    Function myMOD(a As Double, b As Double) As Double 'остаток от деления для чисел типа Double
    myMOD = a - Fix(a / b) * b
    End Function

Результат для примеров
27720
204
1,08522006251049E+15
Работает с типом данных Double, что бы не было переполнения (но для больших чисел может быть ошибка округления)

https://forum.sources.ru/index.php?showtopic=419125&view=findpost&p=3834011

Метки:  

 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку