# BZOJ 2401 陶陶的难题I 数论

42 篇文章 0 订阅
667 篇文章 1 订阅

Ni=1Nj=1Lcm(i,j)=Ni=1i+2Ni=1i1j=1Lcm(i,j)=Ni=1i+2Ni=1i1j=1ijGcd(i,j)=Ni=1i+2Nd=1Ndi=2i1j=1[gcd(i,j)=1]dij=Ni=1i+2Nd=1Ndi=2diiφ(i)2=Ni=1i+Nd=1Ndi=2di2φ(i) $\sum_{i=1}^N\sum_{j=1}^NLcm(i,j)\\=\sum_{i=1}^Ni+2\sum_{i=1}^N\sum_{j=1}^{i-1}Lcm(i,j)\\=\sum_{i=1}^Ni+2\sum_{i=1}^N\sum_{j=1}^{i-1}\frac{i*j}{Gcd(i,j)}\\=\sum_{i=1}^Ni+2\sum_{d=1}^N\sum_{i=2}^{\lfloor \frac N d\rfloor}\sum_{j=1}^{i-1}[gcd(i,j)=1]d*i*j\\=\sum_{i=1}^Ni+2\sum_{d=1}^N\sum_{i=2}^{\lfloor \frac N d\rfloor}d*i*\frac{i*\varphi(i)}{2}\\=\sum_{i=1}^Ni+\sum_{d=1}^N\sum_{i=2}^{\lfloor \frac N d\rfloor}d*i^2*\varphi(i)$

WQNMLGB的取个模能死？

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define M 1001001
using namespace std;

struct Int128{
#define BASE 1000000000000000000ll
long long num[2];
void Standardization()
{
if(num[0]>=BASE)
num[0]-=BASE,num[1]++;
}
Int128() {}
Int128(long long _)
{
num[0]=_;
num[1]=0;
Standardization();
}
Int128& operator += (const Int128 &x)
{
num[0]+=x.num[0];
num[1]+=x.num[1];
Standardization();
return *this;
}
friend ostream& operator << (ostream &_,const Int128 &x)
{
if(x.num[1])
{
printf("%lld%09d%09d\n",x.num[1],(int)(x.num[0]/1000000000),(int)(x.num[0]%1000000000) );
return _;
}
printf("%lld\n",x.num[0]);
return _;
}
};

int phi[M],prime[100100],tot;
bool not_prime[M];
Int128 sum[M];

int n;

void Linear_Shaker()
{
int i,j;
for(i=2;i<=1000000;i++)
{
if(!not_prime[i])
{
phi[i]=i-1;
prime[++tot]=i;
}
for(j=1;prime[j]*i<=1000000;j++)
{
not_prime[prime[j]*i]=true;
if(i%prime[j]==0)
{
phi[prime[j]*i]=phi[i]*prime[j];
break;
}
phi[prime[j]*i]=phi[i]*(prime[j]-1);
}
}
}

void Pretreatment()
{
int i,j;
Linear_Shaker();
for(i=1;i<=1000000;i++)
{
sum[i]+=i;
for(j=2;i*j<=1000000;j++)
sum[i*j]+=Int128((long long)i*j*j*phi[j]);
}
for(i=1;i<=1000000;i++)
sum[i]+=sum[i-1];
}

int main()
{
int T;
Pretreatment();
for(cin>>T;T;T--)
{
scanf("%d",&n);
cout<<sum[n];
}
return 0;
}


12-21 97
11-02 811
02-04 251
09-13 61
03-12 1101
03-14 1020
08-09 353
09-18 1828
03-14 360
05-05 1302
01-25 4324
02-26 426
06-18 1192
03-18 1181
08-23 323
09-13 48
02-26 1万+

### “相关推荐”对你有帮助么？

• 非常没帮助
• 没帮助
• 一般
• 有帮助
• 非常有帮助

©️2022 CSDN 皮肤主题：大白 设计师：CSDN官方博客

PoPoQQQ

¥2 ¥4 ¥6 ¥10 ¥20

1.余额是钱包充值的虚拟货币，按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载，可以购买VIP、C币套餐、付费专栏及课程。