Делаем буквально то, что написано в условии: получаем список простых делителей для каждого числа, если их оказалось три и все они различные, то проверяем, не оканчиваются ли все они на одну цифру. Если и это совпало, добавляем это число в список. В конце выводим ответ: количество чисел в списке и разность между максимальным и минимальным значением.
Производительность тут не так важна, так что можно ничего не оптимизировать, и так ответ получается за разумное время.
Код (python 3):
answer = []
for number in range(416782, 498324 + 1):
prime_divisors, possible_divisor, current = [], 2, number
while possible_divisor ** 2 <= current:
if current % possible_divisor == 0:
prime_divisors.append(possible_divisor)
current //= possible_divisor
else:
possible_divisor += 1
if current != 1:
prime_divisors.append(current)
if len(prime_divisors) == 3 and len(set(prime_divisors)) == 3:
last_digit = prime_divisors[0] % 10
if all(p % 10 == last_digit for p in prime_divisors):
answer.append(number)
print(len(answer))
print(max(answer) - min(answer))
Поделитесь своими знаниями, ответьте на вопрос:
Старшеклассник витя написал скрипт, позволяющий автоматически совершать одну из двух процедур по обмену криптовалют: обменять 33 биткоина на 100100 эфириумов и 500500 долларов. обменять 150150 эфириумов на 44 биткоина и 15001500 долларов. после того, как этот скрипт был запущен несколько раз подряд, количество эфириумов не изменилось, а биткоинов стало на 33 меньше. на сколько долларов пополнился счёт после совершения этих процедур?
Объяснение:
#include <iostream>
using namespace std;
Int main()
{
Setlocale(LC_ALL , "rus");
double x, y;
cout<< "Введите значение x , y " <<endl;
cin>>x>>y;
If ((sqrt(pow(x) + pow(y) <1) && (x>0)&&(y>0))
cout<<"точка принадлежит заштрихованной области" <<endl;
If ((sqrt(pow(x) + pow(y) < 1)&& (x<0)&&(y<0))
cout<<"точка принадлежит заштрихованной области" <<endl;
else
cout<<"точка не принадлежит заштрихованной области" <<endl;
return 0;
}