这题本蒟蒻不知道有什么更好的方法,我只是卑微的在卡常,令人惊讶的是,我竟然AC了。

#include <bits/stdc++.h>
using namespace std;

int n;
int b[1005][1005];

int gcd(int a, int b) {
    if (a < b) swap(a, b);
    if (b == 0) return a;
    return gcd(b, a % b);
}

int main() {
    cin >> n;
    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= i; ++j) {
            b[i][j] = gcd(i, j);
        }
    }
    for (int i = 1; i <= n; ++i) {
        for (int j = i + 1; j <= n; ++j) {
            b[i][j] = b[j][i];
        }
    }
    int ans = 0;
    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= n; ++j) {
            int t = b[i][j];
            for (int k = 1; k <= n; ++k) {
                ans += b[t][k];
            }
        }
    }
    cout << ans << endl;
    return 0;
}

请求各路大神,有没有比更优的时间复杂度。