Написал джоб, который генерирует первые 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];
}
}