90ptsTLE求调
查看原帖
90ptsTLE求调
1074084
asd890123楼主2024/6/29 21:08

#5T了,时间复杂度O(sqrt(n)+d(n)*d(n)),据说n<=1e16时d(n)<=41472,应该不会T啊,why?code:

#include <iostream>

long gcd(long a,long b){return b ? gcd(b,a % b) : a;}
long lcm(long a,long b){return a / gcd(a,b) * b;}

int main(){

    #ifndef ONLINE_JUDGE
        freopen("P5150.in","r",stdin);
    #endif

    std::cin.tie(0)->sync_with_stdio(0);

    long n,cnt = 0,ans = 0,YueShu[41473];

    std::cin >> n;
    for (long i = 1;i * i <= n;i++)
        if (n % i == 0){

            YueShu[++cnt] = i;
            if (i != n / i) YueShu[++cnt] = n / i;
        }
    for (long i = 1;i <= cnt;i++)
        for (long j = 1;j <= cnt;j++)
            if (lcm(YueShu[i],YueShu[j]) == n)
                ans++;
    std::cout << ans << '\n';

    return 0;
}
2024/6/29 21:08
加载中...