August 27, 2024

Проверка числа на совершенное на Leo

Привет! Сегодня мы создадим функцию на языке программирования Leo от проекта Aleo, которая будет определять, является ли полученное число совершенным. Полную задачу вы можете изучить ниже:

Логика программы следующая: мы делаем перебор от 1 до значения переменной, проверяя, делится ли данное число без остатка на нашу переменную, если да, тогда мы суммируем делитель с остальными делителями числа. И далее проверяем, равна ли сумма делителей нашей переменной.

Давайте приступим и создадим новую программу через Aleo Studio:

У нас создалась базовая функция main, изменим в ней вход функции на одну переменную a типа u32, а на выходе функции переменная типа boolean (true, если число совершенное, иначе, false):

Теперь давайте создадим переменную, которая будет хранить сумму всех делителей, переменной а.

Следующим шагом создадим переменную result, она будет иметь тип bool и хранить в себе результат работы программы.

Теперь создаем цикл перебора, в идеале должен быть перебор от 1 до а, но leo это не поддерживает, поэтому просто берем число в рамках которого будет значение переменной a.

В условном выражении прописываем условие. С помощью оператора rem определяем, является ли итерация i делителем и также проверяем, чтобы мы не выходили за значение переменной a (при i > a делителей быть не может). И если i является делителем, тогда прибавляем i к переменной num

Теперь сравниваем num и a. Если они равны, тогда число совершенное и переменная result имеет значение true.

Итак, наша программа готова:

program soversh.aleo { 
    transition main(a: u32) -> bool { 
        let num: u32 = 0u32; 
        let result: bool = false; 
            for i: u32 in 1u32..100u32 { 
                if a.rem(i) == 0u32 && i < a { 
                    num = num + i; 
                } 
            if num == a { 
                result = true; 
                } 
            } 
            return result; 
    } 
}

Давайте введем число 131:

И получаем false:

Если же введем число 28, которое является совершенным получаем true:

Да! Всё верно. На этом всё, увидимся в следующей статье.