C ++使用多核中断输出,数学问题的代码

C ++ using multiple cores breakes output , code for a math problem

所以,我刚开始学习 C++,我必须解决这个问题:找到合适的数字:5 * 5 = 25 , 25 * 25 =625(25squared), 6*6 = 36(6squared)(25 是 625 的尾数,5 是 25 的尾数)。所以我有我的代码来找到所有低于 30k 的数字,但后来我想把它推到极限,所以达到 lluint_max,但它真的很慢,我看到我的 12 核 cpu 未使用,所以我想我会添加更多 cpu 核心。我想找到最简单的修复方法,我找到了 openmp,读了一点,发现如果我为它添加 omp 应该将负载分配给多个内核,但控制台不再显示我的数字。(PS 我在 vs 中启​​用 omp)

这是我的代码:

#include <iostream>
#include <cmath>
#include <climits>
#include <omp.h>
using namespace std;
int main()
{
    long long int x, i, nc = 0, z = 1, p;
#pragma omp for
    for (x = 1; x <= ULLONG_MAX; x++)
    {

        //numarul de cifre a lui x
        while (x / z != 0)
        {
            z = z * 10;
            nc = nc + 1;
        }
        //patratul
        p = x * x;
        i = pow(10, nc);
        if (p % i == x)
            cout << x << endl;

    }
}

这是我的输出:

C:\Users\Mihai Cazac\source\repos\ConsoleAPP2\Debug\ConsoleAPP2.exe (process 8736) exited with code 0.
To automatically close the console when debugging stops, enable Tools->Options->Debugging->Automatically close the console when debugging stops.
Press any key to close this window . . .

预期输出:

1
5
6
25
76
376
625
9376
90625
109376
890625
2890625
7109376
12890625
//and so on 

提前致谢!!

所以我已经解决了,特别感谢 Raymond Chen 的评论和他指导我访问的博客,http://supercomputingblog.com/openmp/tutorial-parallel-for-loops-with-openmp/

这个网站解释得很好。 我尽可能晚地声明变量,也更改为 LLInt_Max 因为 openmp 不想只使用无符号的,idk 为什么 动态调度似乎也分担了工作量,但我可能是错的。

我的最终代码:

#include <iostream>
#include <cmath>
#include <climits>
#include <omp.h>
using namespace std;
int main()
{
#pragma omp parallel for schedule(dynamic)
    for (long long int x = 1; x < LLONG_MAX; x++)
    {

        long long int t = x;
        int d = 0;
        while (t > 0)
        {
            t = t / 10; 
            d++;
        }

        //patratul
        long long int p = x * x;
        long long int i = pow(10, d );
        if (p % i == x)
            cout << x << endl;

    }
}