Программа выводит Unexpected EOF во время выполнения
Я решаю одну задачу на С++.
Вот её код:
#include <iostream>
#include <vector>
#include <cmath>
#include <unordered_set>
using namespace std;
vector<int> decomp (int n)
{
vector<int> ans (0);
int d = 2;
while (d * d <= n)
{
if (n % d == 0)
{
ans.push_back(d);
n /= d;
}
else
d += 1;
}
if (n > 1)
ans.push_back(n);
return ans;
}
int main()
{
int x; cin >> x;
if (x == 1)
cout << 1;
else
{
vector<int> tmp = decomp(x);
unordered_set<int> s;
for (int el: tmp)
s.insert(el);
vector<int> a (0);
for (int el: s)
a.push_back(el);
int y = 1;
for (int i = 0; i < a.size(); i++)
y *= a[i];
if (y >= 29)
cout << y;
else
{
int n;
for (int k = 1; k <= 29; k++)
{
n = k * y;
if ((int)pow(n, n) % x == 0)
{
cout << n;
break;
}
}
}
}
}
Тестировщик на одном из тестов выдаёт следующее сообщение: "user program output: Unexpected EOF" Подскажите пожалуйста, что это за ошибка и из-за чего она возникает? (тестовые данные мне не известны...) Вот текст задачи:
Для того чтобы проверить, как её ученики умеют считать, Мария Ивановна каждый год задаёт им на дом одну и ту же задачу — для заданного натурального A найти минимальное натуральное N такое, что N в степени N (N, умноженное на себя N раз) делится на A. вам необходимо написать программу, решающую эту задачу.
Ответы (1 шт):
Посмотрите на вашу ветвь else — что будет, если y < 29, но условие ((int)pow(n, n) % x == 0) так ни разу и не будет выполнено? никакое значение выведено не будет. Программа завершится без вывода.
Тестирующая программа обнаружит, что канал вывода закрылся, а ответ так и не получен. Произошел неожиданный конец вывода данных — так как ожидалось число. Вот и сообщение отсюда.
Почему такое может произойти — это уже другой вопрос: как написать правильное решение поставленной задачи :)
P.S. Совет на будущее: когда задаете "олимпиадные" задачи, давайте URL проверяющей системы, чтоб не бегать и не искать ссылку...