题解

2 条题解

  • 0
    @ 2017-10-02 13:56:12

    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    using namespace std;
    long long n;
    int main()
    {
    scanf("%lld",&n);
    long long ans=0,tmp=0;
    for(long long a=1,v;a*a<=(v=n/a);a++,ans++)
    for(long long b=a+1;b*b<=v;b++)
    tmp+=n/(a*b)-b;
    ans+=tmp*6;
    tmp=0;
    for(long long a=1,v;(v=a*a)<=n;a++)//减去数重复的情况
    {
    tmp+=n/v;
    if(a*a<=n/a)tmp--;
    }
    ans+=tmp*3;
    printf("%lld\n",ans);
    return 0;
    }

  • 0
    @ 2017-10-02 13:24:29

    正解:将式子看做(a,b,c),a乘b整除c,即转换为求解三元组(a,b,c)有多少组,使得a*b*c<=n;
    其中枚举的时候可以使得a,b,c<=n开三方;用二层循环求解。

  • 1

信息

难度
9
分类
(无)
标签
(无)
递交数
12
已通过
2
通过率
17%
上传者