open System // method 1: Найти количество делителей числа, не делящихся на 3 let countDivisorsNotDivisibleByThree (n: int) = let rec countDivisors current count = if current > n then count else // является ли текущее число делителем n и не делится ли оно на 3 let newCount = if n % current = 0 && current % 3 <> 0 then count + 1 else count countDivisors (current + 1) newCount if n <= 0 then 0 else countDivisors 1 0 // method test let testCountDivisorsNotDivisibleByThree () = let testCases = [1; 3; 6; 9; 10; 12; 15; 20; 30] printfn "Тестирование метода 1: Количество делителей числа, не делящихся на 3" for n in testCases do let divisors = [1..n] |> List.filter (fun i -> n % i = 0) let divisorsNotDivByThree = divisors |> List.filter (fun i -> i % 3 <> 0) let expected = divisorsNotDivByThree.Length let result = countDivisorsNotDivisibleByThree n printfn "n = %d:" n printfn " Все делители: %A" divisors printfn " Делители, не делящиеся на 3: %A" divisorsNotDivByThree printfn " Результат: %d (ожидаемый: %d) - %s" result expected (if result = expected then "OK" else "ОШИБКА") printfn "" [] let main argv = Console.OutputEncoding <- Text.Encoding.UTF8 printfn "Задание 16. Вариант № 5. Метод 1: Найти количество делителей числа, не делящихся на 3.\n" testCountDivisorsNotDivisibleByThree() printfn "Интерактивный режим:" let rec processUserInput () = printf "Введите число для вычисления количества делителей, не делящихся на 3 (или 'q' для выхода): " let input = Console.ReadLine() match input.ToLower() with | "q" | "quit" | "exit" -> () | _ -> match Int32.TryParse(input) with | true, n when n > 0 -> let result = countDivisorsNotDivisibleByThree n let divisors = [1..n] |> List.filter (fun i -> n % i = 0) let divisorsNotDivByThree = divisors |> List.filter (fun i -> i % 3 <> 0) printfn "Число: %d" n printfn "Все делители: %A" divisors printfn "Делители, не делящиеся на 3: %A" divisorsNotDivByThree printfn "Количество делителей, не делящихся на 3: %d" result printfn "" processUserInput () | _ -> printfn "Некорректный ввод. Пожалуйста, введите положительное целое число.\n" processUserInput () processUserInput () 0