Как на C++ выполнить параллельные математические вычисления?
OpenMP#include <iostream>

int main(int argc, char* argv[]) {

	#pragma omp parallel for
	for (size_t i = 0; i < 1000000; ++i)
	{
		std::cout << i << std::endl;
	}
}
Конкретно этот пример работает медленнее на нескольких потоках из-за синхронизации ввода-вывода. Для эффективного использования результат нужно накапливать в памяти, затем выводить.
Способов распаралелить много, но хочу заметить, что ваши вычисления получаются бесконечными отчасти благодаря следующей строке:cout << sqrt(n) << endl;
А именно, из-за endl. После каждого вычисления вы зачем-то сбрасываете поток вместо того, чтоб просто вывести символ перевода на новую строку '\n'.
P.S. В С пишите math.h, а в C++ -  cmath. И зачем вы используете while вместо for?#include <cstdint>
...
for (uint64_t i = 0; i < UINT64_MAX; ++i)
P.P.S. Вот пример на чистом C++. Не забудьте подключить библиотеку pthread.Код#include <iostream>
#include <sstream>
#include <string>
#include <thread>
#include <mutex>
#include <chrono>
#include <cmath>
#include <cstdint>


using namespace std;


mutex ios_mutex;


void compute(int b, int e)
{
    stringstream buffer;
    for (uint64_t i = b; i < e; ++i)
    {
        buffer << sqrt(i) << '\n';
    }

    ios_mutex.lock();
    cout << buffer.str();
    ios_mutex.unlock();
}


int main(int argc, char** argv)
{
    thread t0(compute,   0,  99);
    thread t1(compute, 100, 199);
    thread t2(compute, 200, 299);
    thread t3(compute, 300, 399);
    thread t4(compute, 400, 499);
    thread t5(compute, 500, 599);
    thread t6(compute, 600, 699);
    thread t7(compute, 700, 799);

    t0.join();
    t1.join();
    t2.join();
    t3.join();
    t4.join();
    t5.join();
    t6.join();
    t7.join();

    return 0;
}