Форум » Массивы, сортировка, работа с файлами » Задача 2848 » Ответить

Задача 2848

penantra: Добрый день. Задача: Рассматриваются целые числа, принадлежащих числовому отрезку [278932; 325396], которые представляют собой произведение трёх различных простых делителей, оканчивающихся на одну и ту же цифру. В ответе через пробел запишите количество таких чисел и максимальное из них. Ответы должны быть: 241 325167 Я получаю: 87 325167 Подскажите, где я ошибасюсь. Спасибо. Вот мой код: #include <iostream> #include <cmath> #include <vector> using namespace std; // проверка числа на простоту bool prime(int n) { bool flag = true; for (int i = 2; i <= sqrt(n); i++) { if (n % i == 0) { flag = false; break; } } return flag and n > 1; } // получение простых делителей числа vector <int> F(int n) { vector <int> del; for (int i = 2; i <= sqrt(n); i++) { if (n % i == 0 and prime(i)) { del.push_back(i); if (prime(n / i) and (n / i != i)) { del.push_back(n / i); } } } return del; } int main() { int count = 0; for (int n = 278932; n <= 325396; n++) { vector <int> del = F(n); // если простых делителей ровно 3 if (del.size() == 3) { // определяем произведение делителей int sum = 1; for (int i = 0; i < del.size(); i++) { sum = sum * del; } // проверяем одинаковы ли последние цифры делителей bool flag = true; for (int i = 0; i < del.size(); i++) { if (del[0] % 10 != del % 10) { flag = false; break; } } // считаем количество подходящих чисел if (flag and sum == n) { //cout << n << " "; for (int i = 0; i < del.size(); i++) { //cout << del << " "; } // cout << endl; count++; } } } cout << endl << endl << count; }

Ответов - 2

Поляков: Это задача 25.120 из сборника (DOC-файлы). На сайте есть все авторские решения 25-х задач.

penantra: Спасибо, я нашел свою ошибку.



полная версия страницы