Задача
Решаю задачу на Codewars: найти для следующей формулы n^3 + (n-1)^3 + ... + 1^3 = m число n. Число m известно и передается в функцию FindNb. Если для переданного m не существует n, то ответ: -1. Например:
FindNb(1071225) --> 45
FindNb(91716553919377) --> -1
Мое решение
Вот что сделал я:
public static long FindNb(long m)
{
long sum = 0;
var nResult = 0;
for (var i = 1; sum < m; i++)
{
sum = 0;
nResult = i;
for (var nMaybe = i; nMaybe > 0; nMaybe--)
{
sum += (long)Math.Pow(nMaybe, 3.0);
}
}
if (sum != m)
{
nResult = -1;
}
return nResult;
}
Вопрос
Мое решение работает, но сервис требует оптимизировать код (слишком долго выполняется). Как это сделать?
- сложность моего алгоритма получилась квадратичная (N^2). Не знаю как уменьшить ее.
- также думал может приведение
...(long)Math.Pow...замедляет код, но поиск оптимизации по этой части тоже ничего не дал.

(long)Math.Pow(i, 3.0)наi * i * i. Для малых целых степеней это работает значительно быстрее чем Math.Pow – rdorn Aug 01 '17 at 16:00