Вы можете применить обратную формулу n^3-2
, округлить вверх, а затем применить формулу снова, чтобы получить правильную последовательность. Однако значения 0, 1 и 2 должны быть жестко закодированы.
Примечание: в языках с набранными числами убедитесь, что результатом кубического корня является число с плавающей запятой; если он конвертируется в int автоматически, он будет округлен в меньшую сторону при конвертации.
function calculate(n) {
if (n <= 1) return 0;
if (n == 2) return 3;
return Math.pow(Math.ceil(Math.pow(n - 2, 1 / 3)), 3) + 2;
}
for (var i = 0; i < 70; i++) {
document.write(i + "→" + calculate(i) + " ; ");
}
Приложение: как прокомментировал Стефан Монделаерс, вы должны быть осторожны, полагаясь на математику с плавающей запятой. Приведенный выше код использует тот факт, что кубические корни третьих степеней всегда немного недооцениваются в JavaScript (по крайней мере, во всех современных браузерах, которые я тестировал); например самая большая третья степень в безопасном целочисленном диапазоне JavaScript составляет 4 503 569 204 744 000, но вместо ее кубического корня 165 140 вы получите:
document.write(Math.pow(4503569204744000, 1/3));
Если вы собираетесь округлить результаты вычислений с плавающей запятой, эти очень маленькие ошибки могут привести к большим ошибкам. Самый простой обходной путь - это действительно добавить или вычесть очень маленькое значение перед округлением. Для получения дополнительной информации, например, см. этот вопрос .