如何减少这个双重for循环的时间?

发布于 2022-09-04 05:44:48 字数 664 浏览 10 评论 0

#include<iostream>
#include<ctime>
using namespace std;
int find_intR(int N) {
    int n = 0;
        for (int i = 1; i <= N ; i++)
            for (int j = 1; j <= N ; j++) {
                int p = (i*j) / (i + j);
                if (i*j == p*(i + j))
                    n += 1;
            }
        return n;
}




int main()
{
    int a[10000],i=0;
    while (cin >> a[i]) {
        i++;
    }
    int begin = clock();
    for (int j = 0; j < i; j++)
        cout<<find_intR(a[j])<<endl;
    int end = clock();
    cout << end - begin << endl;
    system("pause");

    return 0;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

情话已封尘 2022-09-11 05:44:48

感觉性能耗费在这
...
int p = (i*j) / (i + j);
if (ij == p(i + j))
n += 1;
...

倾城泪 2022-09-11 05:44:48

说好的更新。。。
我觉得我没有能力继续优化了。

#definde Math_min(a,b) (a)>(b)? (b):(a)

int find_intR(int N) {
    int n = 0;
        // i > j
        for (int i = 1; i <= N ; i++)
            int upBound = Math_min(i*(i-1),N);
            for (int j = i+1; j <=upBound ; j++) {
                if(i*j%(i+j) == 0) {
                    n +=1;
                }
            }
        n *= 2;
        // i == j
        // for (int i = 1; i <= N ; i++){ if(i%2 == 0) { n++;}}
        n += N/2;
        return n;
}
漆黑的白昼 2022-09-11 05:44:48

这个思路的话,再怎么提高也不会提高太多.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文