Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Создание геометрической прогрессии (https://javascript.ru/forum/misc/60870-sozdanie-geometricheskojj-progressii.html)

Untropee 24.01.2016 21:48

Создание геометрической прогрессии
 
Задачка не совсем по javascript, но используется именно там)

Нужно составить весьма популярную, простую формулу (но у меня что-то толку не хватает).

Условия формулы: Чем больше число X, тем меньше увеличивается число N.

Например:

X = 1, то N = 1
X = 110, то N = 9
X = 1120, то N = 23
X = 65000, то N = 70

Пример не точный, написал просто для наглядности.

рони 24.01.2016 22:25

Untropee,
:)
function fn(x)
  {
    return 1 + Math.log(x)*Math.log(x)/2|0
  }

alert([fn(1),fn(110),fn(1120),fn(65000)]);

Untropee 24.01.2016 22:33

Мощнейше) Я как на зло с Math плохо дружу, щас ещё в ней буду разбираться) Разбираюсь, как узнать сколько ещё нужно X, чтобы получить +1 N

Untropee 25.01.2016 13:00

Так и не смог узнать, сколько нужно X, чтобы получить +1 N.

Смог вычислить % сколько выполнено, но вот конечного числа так и не нашёл(

Untropee 27.01.2016 19:56

Ребят, кто всё таки сможет доделать, либо по нужде переделать функцию, если в этой очень сложно?

Я заплачу, в ЛС договоримся, очень надо)

рони 27.01.2016 20:03

Untropee,
чего доделать-то?

Untropee 28.01.2016 02:20

Цитата:

Сообщение от рони (Сообщение 405231)
Untropee,
чего доделать-то?

Как узнать сколько ещё нужно X, чтобы получить +1 N?)

Есть у нас например X = 56796, а N = 62.54
И вот сколько ещё нужно X чтобы вышло ровно 63?

рони 28.01.2016 02:52

Untropee,
:-?
function fn(x)
  {
    return 1 + Math.log(x)*Math.log(x)/2|0
  }


 function foo(y)
 {
    return Math.ceil(Math.exp(Math.sqrt((y - 1)*2)))
 }
var x = 20; //текущее х
var n = fn(x); //текущее n = 5
var nextX = foo(n+1); //24 будущее x при котором n увеличится
var z = nextX-x; //24 - 20 до следующего уровня 6 осталось 4
alert(fn(x+z)); //6

рони 28.01.2016 03:05

Untropee,
<script>
function fn(x)
  {
    return 1 + Math.log(x)*Math.log(x)/2|0
  }


 function foo(y)
 {
    return Math.ceil(Math.exp(Math.sqrt((y - 1)*2)))
 }

for (var i=1; i<=100; i++)  {document.write("n = "+i+" x = "+foo(i)+ " test = "+ (fn(foo(i)) == i && fn(foo(i)-1) != i) + "<br>")}
</script>

Untropee 28.01.2016 13:07

Всё отлично! Спасибо большое.


Часовой пояс GMT +3, время: 01:32.