求值:

易得原式如下:

(通常,我们一般会选择将化成来观察)

将原式复制一份得:

考虑到,可以将原式改为:

式中为了保证有意义,将值为的一项提取出来。

两个求和式中分母相同的项可以合并。

即:

考虑枚举,所以只需要统计的个数,因为,所以,所以满足这个条件的的数量为

故答案为:

到这里就可以去解决这题了,但是还可以优化。

,则有:

,易知是积性函数,于是可以筛出。然后每次算出结果。

搜先考虑的值,有:

,令,则:

于是有:

同理有:

解得:

Code:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e6+7;
vector<int>prime;
ll g[maxn];
bool vis[maxn];
inline void init() {
    g[1]=1;
    for(int i=2;i<maxn;++i) {
        if(!vis[i]) {
            prime.emplace_back(i);
            g[i]=(ll)i*(i-1)+1;
        }
        for(auto &j:prime) {
            if(i*j>maxn) break;
            vis[i*j]=1;
            if(i%j==0) {
                g[i*j]=g[i]+(g[i]-g[i/j])*j*j;
                break;
            }
            g[i*j]=g[i]*g[j];
        }
    }
}
signed main() {
    cin.sync_with_stdio(false), cin.tie(nullptr),cout.tie(nullptr);
    int T,n;
    init();
    cin>>T;
    while(T--) {
        cin>>n;
        cout<<(g[n]+1)*n/2<<'\n';
    }
    return 0;
}