C/C++

Вычисление суммы знакопеременного ряда

Данa последовательность (-1)ⁿ p(n) / n, где р(n) - количество простых чисел от 1 до n включительно, а n последовательно проходит все натуральные значения. Чему равна сумма всех элементов этой последовательности?
Я бы так сделала (с ситом Эратосфена !):
#include <iostream>
#include <cmath>
using namespace std;
unsigned *a, b[32], c[32];
void fal(unsigned x) { a[x >> 5] &= c[x & 31]; }
unsigned bit(unsigned x)
{ return a[x >> 5] & b[x & 31]; }
int main() { unsigned i, j, k, l, m, n;
double z = 1, s = 0., p; i = 1; b[0] = i; c[0] = ~i;
for (j = 1; j < 32; j++) { i <<= 1; b[j] = i; c[j] = ~i; }
cout << "n = ?\b"; cin >> n; m = ceil((n + 1.) / 32);
a = new unsigned [m]; for (i = 0; i <= m; i++)
a[i] = 4294967295; fal(0); fal(1); i = ceil(sqrt(n));
for (j = 2; j <= i; j++) if (bit(j)) { k = n / j;
for (l = 2; l <= k; l++) fal(l * j); }
p = 0.; for (i = 1; i < n; i++) { z *= -1.;
if (bit(i)) p += 1.; s += z * p / i; } cout << s << ' ';
if (bit(n)) p += 1.; s += - z * p / n; cout << s
<< endl; system("pause > nul"); return 0; }
Тут информация о простоте или непростоте чисел в диапазоне [0; n] упаковывается в массив из четырёхбайтных целых типа unsigned. Сама же последовательность сумм S(n) состоит из двух подпоследовательностей - одна для чётных, другая для нечётных n. Это как Инь и Ян китайской натурфилософии, где Ян - ведущий элемент. Вот и здесь S(2n+1) получается точнее S(2n), которая постоянно догоняет сумму нечётных 2n+1, а сравняются они только в бесконечности. Точность всей суммы не меньше модуля первого отброшенного члена исходной последовательности, так как ряд этот знакопеременный. Только вот ошибка получается достаточно значительной в силу плохой сходимости ряда, модуль общего члена которого ~¹/ln n. У меня получились следующие результаты, когда я взяла n=2³²-1:
S(4294967294) = -1,14885
S(4294967295) = -1,19618
Значение последней суммы - более точное, а относительная ошибка лежит в пределах примерно ±3,76%. Если надо относительную ошибку уменьшить хотя бы до 3%, тогда надо перебрать что-то около триллиона первых натуральных чисел. Интересно вот только - да кому это нужно? Для простой оценки сойдёт и этот полученный результат, тем более, что от таких вычислений всё равно никому нет никакой пользы!. (◔‿◔)
Вова Новак
Вова Новак
29 440
Лучший ответ
Сергей Каратаев Я проверила. И впрямь работает, действительно правильно генерируются простые числа, да еще так быстро, спасибо! Теперь хорошо представляю, что тут делать, сейчас как раз занята переделкой битовых операций под восьмибайтные целые, потом запущу для полтриллиона первых натуральных чисел, все равно больше памяти нет. Смысла тоже не вижу никакого, а польза слишком абстрактна, относительна и сомнительна.
А в той другой задаче про ряды регулярность наступает где-то при четверти или трети триллиона и выше. Потом там тоже переделаю числа на 16-байтные, сделаю надёжные функции, которым можно доверять, и буду запускать по новой. И еще на подходе куча новых задач, то есть я пока в запарке, а Вам всего хорошего!
Fuad Mamedov ох уж эти дамы. классику не читали. не то Ланцоша, не то Коллатца
поскольку члены ряда с разными знаками, при начале с больших когда доходим до маленьких, накапливается ошибка
для повышения точности надо суммировать нечиная с маленьких пар. тогда результат получится существенно точнее.

у меня
за 7.98999890685081E-0001 секунд найдено
primes 2 to 100 000 000
Поскольку количество простых чисел по сравнению с общим их количеством относительно невелико, данная сумма должна конвергировать к некоторому -σln2. Осталось найти асимптотику этого σ, но тут уж извиняй, теоретический математик из меня так себе... А при чем тут программирование?
Сергей Каратаев У меня минусовой результат и получается, а причем тут -сигма ln2 и откуда вообще взялось такое диковинное выражение? Я и в прошлый раз не поняла насчет мажорирующего ряда, и сейчас снова не понимаю такого странного ответа. Вычислить же надо значение суммы ряда, а для этого требуется разыскать все простые числа. Я на пальцах буду все это считать или пусть лучше компьютер за меня посчитает по программе? Асимптотики еще надо уметь правильно определять, а тут просто надо вычислить сумму и желательно с приемлемой точностью, что еще непонятно? Это задания по модулю ‹‹итерационные и рекурсивные алгоритмы››, кстати говоря.
взять и посчитать в лоб

primes 2 to 100 000 000
считаются за
7.98999890685081E-0001 секунд
Программа "Боевая Ударница"=на Фортран, развивает логику.
Умничка, и Любимка тоже.
Лапа, лапуся тоже.
Удач!!!!!
Помогите !Как сделать меню в small basic? !
Надо что бы в меню было кнопка играть (при нажатие которой стирается все что есть на данный момент на экране и появляется квадрат который спомошью мышки можно управлять),сохранит(при нажатии которой сохраняется игра на том моменте где остановилась),настройки(при нажатии которой стирается все что есть на данный момент на экране и появляется кнопка которая делает окно во весь игран),выход(при нажатии которой выходит из программы)
!!П.с кнопка Esc должна в каждой из выше перечислено возвращаться к меню!!
Кнопка Еsc должна быть