В настоящее время мне поручено написать программу, которая рассчитывает количество палиндромов в любой базе с интервалом <2;36>
. Проблема в том, что мое решение имеет временную сложность O(n^2)
в лучшем случае, и, если честно, очень медленно.
До сих пор я пробовал наивные решения, такие как преобразование всех чисел из интервала вбаза, которая требуется, сохраняя преобразование числа в массив, а затем проверяя каждый из элементов по одному.
Это то, что я получил до сих пор:
int isTrue = 1;
int arr[64];
while(n > 0)
{
arr[counter] = n % base;
n = n / base;
counter++;
}
for(int i = 0; i < counter; i ++)
{
if(arr[i] != arr[counter - i - 1])
{
isTrue = 0;
break;
}
}
Это не хорошо ни при каких условиях, но оно работает для базового теста. Проблема в том, что я сейчас пытаюсь найти бонус, который работает с гораздо большими числами.
Под гораздо большими числами я подразумеваю интервалы, охватывающие миллиарды чисел, например, одним из входных данных является:
c 15 62103360044 155888062462
Result : 123502
Где c - это задача, которую должна выполнить программа (тамбыла опция l, которая перечисляла все палиндромы, которые не встречаются в бонусных тестах), 15 является базовым, а два других числа являются пределами интервала.
Я должен считать палиндромы из пяти такихинтервалы менее одной секунды, и, честно говоря, я довольно застрял.
Буду признателен за любую помощь, извините, если я неправильно отформатировал свой вопрос или он был слишком затянут - я впервыемы задали вопрос здесь.