Образцы и последовательность - Выражение 'a' как функция от 'n' - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть следующая картина. Я хочу выразить 'a' как функцию от n.

if n=0 then a=0
if n=1 then a=0
if n=2 then a=3
if n=3 then a=3
if n=4 then a=10
. 
.
.
if n=10 then a=10
if n=11 then a=29
.
.
. 
if n=29 then a=29
if n=30 then a=66
.
.
.
if n=66 then a=66
if n=67 then a=127
.
.

КАК вы можете видеть, что значение a остается неизменным до тех пор, пока значение a не совпадет с n. После чего значение a изменяется и снова это значение сохраняется до a<=n. Я нашел формулу, с которой этот шаблон встречается. Это

a = 1^3 + 2 при n<=3

a = 2^3 + 2 при n > 3 and n <=10 и т. д.

Как выразить a как функцию n? как f(n) = {___ <condition>

1 Ответ

0 голосов
/ 05 сентября 2018

Вы можете применить обратную формулу 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 + "&rarr;" + calculate(i) + " ; ");
}    

Приложение: как прокомментировал Стефан Монделаерс, вы должны быть осторожны, полагаясь на математику с плавающей запятой. Приведенный выше код использует тот факт, что кубические корни третьих степеней всегда немного недооцениваются в JavaScript (по крайней мере, во всех современных браузерах, которые я тестировал); например самая большая третья степень в безопасном целочисленном диапазоне JavaScript составляет 4 503 569 204 744 000, но вместо ее кубического корня 165 140 вы получите:

document.write(Math.pow(4503569204744000, 1/3));

Если вы собираетесь округлить результаты вычислений с плавающей запятой, эти очень маленькие ошибки могут привести к большим ошибкам. Самый простой обходной путь - это действительно добавить или вычесть очень маленькое значение перед округлением. Для получения дополнительной информации, например, см. этот вопрос .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...