今天比赛的 G 题可以完全使用 oeis 解决
  • 板块灌水区
  • 楼主StarryAbyss
  • 当前回复5
  • 已保存回复5
  • 发布时间2024/3/9 18:07
  • 上次更新2024/3/9 20:10:13
查看原帖
今天比赛的 G 题可以完全使用 oeis 解决
821638
StarryAbyss楼主2024/3/9 18:07

数列为 A061201,下面的 FORMULA 中有一栏:

To compute a(n) for huge n (see A180365) in sublinear use a(n) = 3*Sum_{i=1..n3} A006218(n/i) - Sum_{j=1..n3} floor(n/(i*j)) + n3^3, where n3 = floor(n^(1/3)). - Andrew Lelechenko, Apr 15 2011

接着找到 A006218:

a(n) = 2*(Sum_{i=1..floor(sqrt(n))} floor(n/i)) - floor(sqrt(n))^2. - Benoit Cloitre, May 12 2002

AC code:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n;
int sol(int n){
    int sn=sqrt(n),sum1=0;
    for(int i=1;i<=sn;i++){
        sum1+=n/i;
    }
    return 2*sum1-sn*sn;
}
signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin>>n;
    int n3=cbrt(n),sum1=0,sum2=0;
    for(int i=1;i<=n3;i++){
        sum1+=sol(n/i);
    }
    for(int i=1;i<=n3;i++){
        for(int j=1;j<=n3;j++){
            sum2+=n/(i*j);
        }
    }
    cout<<3*sum1-3*sum2+n3*n3*n3;
}
2024/3/9 18:07
加载中...