https://www.luogu.org/problemnew/show/P3768

化简一下式子,就是$\sum_{d=1}^ncalc(d)d^2\varphi(d)$

其中$calc(d)=\frac{({\lfloor}\frac{n}{d}{\rfloor}+1)^2{{\lfloor}\frac{n}{d}{\rfloor}}^2}{4}$

可以对calc(d)做整除分块,那么要求$d^2\varphi(d)$的前缀和

看一眼数据范围,大概要杜教筛

凑了一会,发现令$f(d)=d^2\varphi(d)$,$g(d)=d^2$,$h=f*g$,那么$h(n)=n^2\sum_{d|n}\varphi(d)=n^3$

(也就是说$id^3=id^2\varphi*id^2$,好神奇啊)

那么就好办了,$n^3$的前缀和是有公式的($1^3+2^3+..+n^3=(1+2+..+n)^2$)

杜教筛那个式子套一下就行了。。也可以预处理一点前缀和

复杂度?...不会算

以下是瞎扯:

设预处理1-K

算一次x,复杂度是$f(x)=\sum_{i=1}^{x/K}\sqrt{\frac{x}{i}}=O(\frac{x}{\sqrt{K}})$

后半部分复杂度是$\sum_{i=1}^{n/K}f(\frac{n}{i})=nK^{-\frac{1}{2}}\sum_{i=1}^{n/K}\frac{1}{i}=nK^{-\frac{1}{2}}log(n/K)$

总复杂度是$nK^{-\frac{1}{2}}log(n/K)+K$

当$K=n^{\frac{2}{3}}$时,复杂度是$n^{\frac{2}{3}}log$

 #include<cstdio>
#include<algorithm>
#include<cstring>
#include<vector>
#include<map>
using namespace std;
#define fi first
#define se second
#define mp make_pair
#define pb push_back
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
ll md;
ll H(ll n)
{
__int128 t=__int128(n+)*n/%md;
return t*t%md;
}
ll G(ll n)
{
return __int128(n)*(n+)*(*n+)/%md;
}
ll Mod(ll n,ll d=md)
{
if(n>=) return n%d;
else if(n%d==) return ;
else return d+n%d;
}
const ll K=;
ll HH[K+],prime[K+],len;
bool nprime[K+];
map<ll,ll> ma;
ll calc(ll n)
{
if(n<=K) return HH[n];
if(ma.count(n)) return ma[n];
ll i,j,ans=H(n);
for(i=;i<=n;i=j+)
{
j=n/(n/i);
ans=Mod(ans-Mod(G(j)-G(i-))*calc(n/i)%md);
}
return ma[n]=ans;
}
ll n;
ll X(ll d)
{
__int128 t=__int128(n/d+)*(n/d)/%md;
return t*t%md;
}
ll ans;
int main()
{
ll i,j;
//md=1000000007;
scanf("%lld%lld",&md,&n);
HH[]=;
for(i=;i<=K;i++)
{
if(!nprime[i]) {prime[++len]=i;HH[i]=i-;}
for(j=;j<=len&&i*prime[j]<=K;j++)
{
nprime[i*prime[j]]=;
if(i%prime[j]==)
{
HH[i*prime[j]]=HH[i]*prime[j];
break;
}
else
HH[i*prime[j]]=HH[i]*(prime[j]-);
}
}
for(i=;i<=K;i++) HH[i]=HH[i]*i%md*i%md;
for(i=;i<=K;i++) HH[i]=(HH[i-]+HH[i])%md;
// while(1)
// {
// scanf("%lld",&n);
// printf("%lld\n",calc(n));
// }
for(i=;i<=n;i=j+)
{
j=n/(n/i);
ans=(ans+X(i)*Mod(calc(j)-calc(i-))%md)%md;
}
printf("%lld",ans);
return ;
}

最新文章

  1. c#与JavaScript实现对用户名、密码进行RSA非对称加密
  2. PHP运算符
  3. Redis 配置文件
  4. struts2中jsp前台传值到后台action的方法(转)
  5. 【UEditor】 UEditor整合项目上传资源到阿里云服务器
  6. iOS开发Swift篇—(六)流程控制
  7. 如何避免MVC Model First 设计时添加的DataAnnotation被覆盖掉
  8. 转:Java HashMap实现详解
  9. C#中string.Format()和ToString()格式化方法
  10. 如何使用ERStudio 生成comment
  11. PHP学习心得(四)——基本语法
  12. 数据结构- 串的模式匹配算法:BF和 KMP算法
  13. MySQL事务的的介绍及使用
  14. Android学好Shape不再依赖美工
  15. Python函数式编程(一):高级函数
  16. Maven入门:使用Nexus搭建Maven私服及上传下载jar包
  17. iOS UI基础-19.0 UICollectionView
  18. 小希的迷宫---hdu1272
  19. RabbitMQ(三):消息持久化策略
  20. ajax 与 form 提交的区别

热门文章

  1. Spyder的汉化
  2. SpringBoot项目 部署到服务器的tomcat下
  3. Micro Frontends
  4. ie67 display:inline-block 失效解决方法
  5. django-sso单点登陆的实现
  6. MYSQL初级学习笔记三:数据的操作DML!(视频序号:初级_24,25,36)
  7. JS 之正则表达式
  8. HNOI2017 day1 T2 影魔
  9. Docker学习笔记(转自培训ppt)
  10. wcf中序列化BinaryFormatter,DataContractJsonSerializer,DataContractSerializer,SoapFormatter,XmlSerializer