|
|
@ -0,0 +1,67 @@
|
|
|
|
|
|
|
|
require 'prime'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# @param n [Integer] Число, для которого нужно найти количество четных, не взаимно простых чисел.
|
|
|
|
|
|
|
|
# @return [Integer] Количество четных чисел, не взаимно простых с данным числом.
|
|
|
|
|
|
|
|
# @example
|
|
|
|
|
|
|
|
# count_even_non_coprimes(30) # => 14
|
|
|
|
|
|
|
|
def count_even_non_coprimes(n)
|
|
|
|
|
|
|
|
(1...n).count do |num|
|
|
|
|
|
|
|
|
num.even? && n.gcd(num) != 1
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# @param n [Integer] Число, цифры которого нужно проверить.
|
|
|
|
|
|
|
|
# @return [Integer, nil] Максимальная цифра числа, не делящаяся на 3, или nil, если таких цифр нет.
|
|
|
|
|
|
|
|
# @example
|
|
|
|
|
|
|
|
# max_digit_not_divisible_by_three(483726) # => 8
|
|
|
|
|
|
|
|
def max_digit_not_divisible_by_three(n)
|
|
|
|
|
|
|
|
n.digits.select { |digit| digit % 3 != 0 }.max
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# @param n [Integer] Число, для которого нужно найти наименьший делитель.
|
|
|
|
|
|
|
|
# @return [Integer] Наименьший делитель числа.
|
|
|
|
|
|
|
|
# @example
|
|
|
|
|
|
|
|
# smallest_divisor(30) # => 2
|
|
|
|
|
|
|
|
def smallest_divisor(n)
|
|
|
|
|
|
|
|
(2..n).find { |i| n % i == 0 }
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# @param n [Integer] Число, для которого нужно найти подходящее максимальное число.
|
|
|
|
|
|
|
|
# @return [Integer, nil] Максимальное число, не взаимно простое с данным, не делящееся на наименьший делитель, или nil, если таких чисел нет.
|
|
|
|
|
|
|
|
# @example
|
|
|
|
|
|
|
|
# max_non_coprime_not_divisible_by_smallest_divisor(30) # => 28
|
|
|
|
|
|
|
|
def max_non_coprime_not_divisible_by_smallest_divisor(n)
|
|
|
|
|
|
|
|
divisor = smallest_divisor(n)
|
|
|
|
|
|
|
|
(1...n).select { |num| n.gcd(num) != 1 && num % divisor != 0 }.max
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# @param n [Integer] Число, цифры которого нужно просуммировать.
|
|
|
|
|
|
|
|
# @return [Integer] Сумма цифр числа, меньших 5.
|
|
|
|
|
|
|
|
# @example
|
|
|
|
|
|
|
|
# sum_of_digits_less_than_five(483726) # => 9
|
|
|
|
|
|
|
|
def sum_of_digits_less_than_five(n)
|
|
|
|
|
|
|
|
n.digits.select { |digit| digit < 5 }.sum
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# @param n [Integer] Число, для которого проводится вычисление.
|
|
|
|
|
|
|
|
# @return [Integer] Произведение максимального числа и суммы цифр числа.
|
|
|
|
|
|
|
|
# @example
|
|
|
|
|
|
|
|
# product_of_max_and_sum(30) # => 252
|
|
|
|
|
|
|
|
def product_of_max_and_sum(n)
|
|
|
|
|
|
|
|
max_number = max_non_coprime_not_divisible_by_smallest_divisor(n)
|
|
|
|
|
|
|
|
sum_digits = sum_of_digits_less_than_five(n)
|
|
|
|
|
|
|
|
max_number * sum_digits
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
puts count_even_non_coprimes(30) # => 14
|
|
|
|
|
|
|
|
puts max_digit_not_divisible_by_three(483726) # => 8
|
|
|
|
|
|
|
|
puts product_of_max_and_sum(30) # => 252
|