C++中的双for循环10000*10000,运行好慢,请给个建议,缩短运行时间。for循环代码如下

int max = m.size();//max=10240
int n = 3;
int cout = 10000;
srand(time(NULL));
//开始找轮廓距离圆心的距离,再跟对应的半径比较
Point2f bj;//将轮廓中的坐标循环放到BJ中
int sum = 0;//记录满足坐标的个数
vector mb;//将满足的坐标放到mb中
float b, b1;
vector v1(3);
for (int i = 0; i < cout; i++)//count为得到的三个点的个数,也就是圆的个数,此处count设为10000
{
//vector v1(3);

            for (int i = 0; i < n; i++)//此循环为随机得到在m里面的三个点集
            {
                    int u = rand() % max;
                    v1[i] = m[u];//m为得到的轮廓的坐标集
            }
            IsPointInALine(v1[0], v1[1], v1[2]);//判断三点是否可以构成圆,是,返回true,不是,返回false
            FindCircle(v1[0], v1[1], v1[2], centre, radius);//得出三点的圆心坐标与半径
            sum = 0;
            if (!((IsPointInALine(v1[0], v1[1], v1[2]))&&(70<radius<80)&&(54<radius<60)))
                    continue;//三点是否组成圆,是,则找与该圆心距离为其半径的点

                    for (int j = 0; j < max; j++)//max为m点集的个数m.size()
                    {
                            bj = m[j];

                            b1 = (float)(sqrt((bj.x - centre.x)*(bj.x - centre.x) + (bj.y - centre.y)*(bj.y - centre.y)));
                            b = fabs(b1 - radius);
                            if (b <= 1)
                                    sum += 1;
                            float zc;
                            zc = 4/3*PI*radius;
                            if (sum>zc)
                            {

                                    mb.push_back(Point3f(centre.x, centre.y, radius));
                                    circle(image, centre, radius, Scalar(155, 50,255));
                                    break;
                            }
                    }

    }

可以分步骤:
1. 首先 将所有 可以形成圆 的 坐标都 存起来,map或者哈希都可以,自己自定义 存储结构
2. 然后判断并取得 这些 圆的半径
3. 走 max 循环

注: 这三步 虽然看起来 跟 你这个循环 结构 走的一样,但是分开之后走,你就会发现,节约很多

直接输出100,000,000不就行了