#include#define LL long longusing namespace std;const int maxn=1e7+10;bool vis[maxn];int prime[maxn];int mu[maxn];int sum1[maxn];int sum2[maxn];int tot=0;void get_mu()// mo bi su si han shu{ mu[1]=1; vis[1]=1; for(int i=2;i >n; LL ans=0; for(int i=1;i<=n;i++) { ans+=1LL*(n/i)*(n/i)*sum1[i]; } cout< <
整除分块 (看起来更麻烦)
#include#define LL long longusing namespace std;const int maxn=1e7+10;bool vis[maxn];int prime[maxn];int mu[maxn];int sum1[maxn];int sum2[maxn];int tot=0;void get_mu()// mo bi su si han shu{ mu[1]=1; vis[1]=1; for(int i=2;i >n; LL ans=0; //for(int i=1;i<=n;i++) ans+=1LL*(n/i)*(n/i)*sum1[i]; for(int l=1,r;l<=n;l=r+1) { r=n/(n/l); // l-r 区间相同值 区间值n/l ans+=1LL*(n/l)*(n/l)*(sum2[r]-sum2[l-1]); } cout< <