2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу 1, 2  След.
 
 Частичная сумма ряда
Сообщение19.02.2012, 19:12 
Аватара пользователя
Вычислить:
$\sum\limits_{k=1}^{10^6}\lfloor\sqrt k\rfloor$

У меня получился ответ 666167500, хотела сверить с Альфой, но она такие большие числа не берёт: http://www.wolframalpha.com/input/?i=su ... to+1000000
Вот тысячу берёт, а миллион - хоть ложись да помирай!

Вот мои соображения:
Имеем ряд $1, 1, 1, 2, 2, 2, 2, 2, \dots$ , сумма которого равна $1\cdot 3+2\cdot 5+\dots +n(2n+1)+\dots$
Таким образом, искомая сумма равна $1000+\sum\limits_{k=1}^{999}2k^2+k$
Воспользовавшись формулой $\sum\limits_{k=1}^{n}k^2=\frac{n(n+1)(2n+1)}{6}$, имеем
$1000+\sum\limits_{k=1}^{999}2k^2+k=1000+\frac{999\cdot 1000\cdot 1999}{6}\cdot 2+\sum\limits_{k=1}^{999}k$, что, в свою очередь, равно $1000+333\cdot 1000\cdot 1999+999\cdot 500=666167500$

Где брешь?

 
 
 
 Re: Частичная сумма ряда
Сообщение19.02.2012, 19:19 
Аватара пользователя
Проверил на C++, ответ правильный.

 
 
 
 Re: Частичная сумма ряда
Сообщение19.02.2012, 19:21 
Ktina в сообщении #540602 писал(а):
Вот тысячу берёт, а миллион - хоть ложись да помирай!
Просто подождать подольше нужно. Но вручную, конечно, быстрее будет.

 
 
 
 Re: Частичная сумма ряда
Сообщение19.02.2012, 19:24 
Аватара пользователя
svv в сообщении #540603 писал(а):
Проверил на C++, ответ правильный.

(Оффтоп)

Ой, а можно код?


-- 19.02.2012, 18:25 --

nnosipov в сообщении #540604 писал(а):
Ktina в сообщении #540602 писал(а):
Вот тысячу берёт, а миллион - хоть ложись да помирай!
Просто подождать подольше нужно. Но вручную, конечно, быстрее будет.

(Оффтоп)

Это же в каком веке мы живём, что вручную быстрее?

 
 
 
 Re: Частичная сумма ряда
Сообщение19.02.2012, 19:28 
Ktina
Используется синтаксис C++
double s = 0.0;
for (int i = 1; i <= 1000 * 1000; i++)
  s += floor(sqrt((double)i));
printf("%d\n", s);

 
 
 
 Re: Частичная сумма ряда
Сообщение19.02.2012, 19:31 
Ktina в сообщении #540605 писал(а):

(Оффтоп)

Это же в каком веке мы живём, что вручную быстрее?

(Оффтоп)

Я имел в виду Ваше решение. У меня Maple пока не подсчитал :-) А вот теперь подсчитал: 666167500. Минут 15 прошло.

 
 
 
 Re: Частичная сумма ряда
Сообщение19.02.2012, 19:41 
Ktina в сообщении #540605 писал(а):
Ой, а можно код?

код: [ скачать ] [ спрятать ]
Используется синтаксис Pascal
{$N+E-}

var  i,k: longint;   s: comp;

begin

  s:=0;

  for i:=1 to 1000000 do begin
    k:=trunc(sqrt(i));
    s:=s + k;
  end;

  writeln(s:15:2);
  readln;

end.

Считает где-то одну десятую секунды.

 
 
 
 Re: Частичная сумма ряда
Сообщение19.02.2012, 19:43 
Аватара пользователя
Используется синтаксис C++
int s=0, a=0;
for (int k=0; k<=1000000; ++k)
{
   while ((a+1)*(a+1)<=k) ++a;
   s+=a;
}
 

Здесь только целочисленные операции, чтобы не мучили сомнения, вдруг где-то что-то не туда округлилось или набежала ошибка.

 
 
 
 Re: Частичная сумма ряда
Сообщение19.02.2012, 19:47 
svv в сообщении #540621 писал(а):
Здесь только целочисленные операции, чтобы не мучили сомнения,

Но это уже почти на пределе: int -- он ведь, насколько помню, четырёхбайтовый.

 
 
 
 Re: Частичная сумма ряда
Сообщение19.02.2012, 19:48 
О временах счёта. Mathematica 8 на P4 3 ГГц (правда, ещё куча программ одновременно работала):
Код:
In[2]:= Timing[Sum[Floor[Sqrt[k]], {k, 1, 10^6}]]
Out[2]= {185.391, 666167500}
In[3]:= Timing[Sum[Floor[Sqrt[k]], {k, 1., 1000000.}]]
Out[3]= {4.25, 666167500}
(Timing выдаёт секунды, затраченные на вычисление, и результат.) Радует, что целочисленно меньше 15 минут. :-)

P. S. Это я рекламирую. :mrgreen:

 
 
 
 Re: Частичная сумма ряда
Сообщение19.02.2012, 19:49 
Аватара пользователя
Программер обязан знать наизусть: -2147483648...+2147483647
Важно, что 1000000 меньше 2147483648.
А, понял, Вы о сумме. Да, где-то еще один порядок -- и int всё.
В моей среде есть еще __int64

 
 
 
 Re: Частичная сумма ряда
Сообщение19.02.2012, 20:03 
Да, svv молодец — мой код считается 100 миллисекунд, его же менее чем за 100 наносекунд.

 
 
 
 Re: Частичная сумма ряда
Сообщение19.02.2012, 20:05 

(Оффтоп)

Да уж, никакая СКА не сравнится даже с не очень оптимизированным кодом на C++! :D

 
 
 
 Re: Частичная сумма ряда
Сообщение19.02.2012, 20:12 
Аватара пользователя
Только, к сожалению, и C++ не сравнится по удобству с СКА в тех областях, для которых они были созданы...

 
 
 
 Re: Частичная сумма ряда
Сообщение12.05.2012, 09:43 
$\sum\limits_{k=1}^{n}k^2=\frac{n(n+1)(2n+1)}{6}$
А не подскажите вывод этой формулы (или где его можно найти)?

 
 
 [ Сообщений: 17 ]  На страницу 1, 2  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group