![]() |
#10 |
Участник
|
Написал джоб, который генерирует первые 10 тысяч чисел фибоначчи. Длина 10-тысячного числа составляет около 2000 цифр. Вообще, приблизительная длина любого n-ного числа фибоначчи составляет примерно n/5 цифр. Так как надо сложить 1+2+3+5+8 = 5 чисел, чтобы к числу прибавился новый разряд.
Джоб у меня отработал примерно за 20 минут. На генерацию одного n-ного члена ряда, у которого n близко к 10000, уходит примерно 0,2 секунды. На генерацию первой тысячи элементов ряда уходит 5-10 секунд. Поэтому для удобства тестируйте этот джоб для 1000 элементов. Если переписать этот джоб на языке C++ и пользоваться указателями и массивами, то быстродействие увеличится в тысячи раз. И можно будет вычислять миллионные члены ряда Фибоначчи. X++: static void Job119(Args _args) { int fibonacciSize = 10000; //сколько надо получить чисел Фибоначчи str x; str y; str total; int i; SysOperationProgress p = new SysOperationProgress(); str sumStrings(str _a, str _b) { str ret; int result; int digit; int j; int a; int b; int n; ; for (j = (strLen(_a) > strLen(_b) ? strLen(_a) : strLen(_b)); j >= 1; j--) { n ++; if (strLen(_a) >= n) a = str2int(subStr(_a, strLen(_a) - n + 1, 1)); else a = 0; if (strLen(_b) >= n) b = str2int(subStr(_b, strLen(_b) - n + 1, 1)); else b = 0; result = digit + a + b; digit = result / 10; result = result mod 10; ret = int2str(result) + ret; } if (digit) ret = int2str(digit) + ret; return ret; } ; p.settotal(fibonacciSize); p.update(true); x = "0"; y = "1"; info(x); info(y); while (fibonacciSize) { p.incCount(); p.update(true); fibonacciSize --; total = sumStrings(x, y); info(total); [x, y] = [y, total]; } } Последний раз редактировалось Ace of Database; 11.02.2017 в 15:59. |
|
|
За это сообщение автора поблагодарили: mazzy (2). |