题面

传送门

题解

懒了……这里写得挺好的……

//minamoto
#include<bits/stdc++.h>
#define R register
#define ll long long
#define IT map<ll,int>::iterator
#define fp(i,a,b) for(R int i=a,I=b+1;i<I;++i)
#define fd(i,a,b) for(R int i=a,I=b-1;i>I;--i)
#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
using namespace std;
const int N=6e6+5,P=1e9+7,inv2=500000004,inv6=166666668;
bitset<N>vis;int p[N],phi[N],g[N],m,sqr;ll n;map<ll,int>mp;
inline int calc(R int x){return (1ll*x*(x+1)>>1)%P;}
inline int calc2(R int x){return 1ll*x*(x+1)%P*((x<<1)+1)%P*inv6%P;}
inline int calc3(R int x){x=calc(x);return 1ll*x*x%P;}
void init(int n){phi[1]=g[1]=1;fp(i,2,n){if(!vis[i])p[++m]=i,phi[i]=i-1,g[i]=1ll*phi[i]*i%P*i%P;for(R int j=1,k;j<=m&&1ll*i*p[j]<=n;++j){vis[k=i*p[j]]=1;if(i%p[j]==0){phi[k]=phi[i]*p[j],g[k]=1ll*phi[k]*k%P*k%P;break;}phi[k]=phi[i]*(p[j]-1),g[k]=1ll*g[i]*g[p[j]]%P;}}fp(i,2,n)(g[i]+=g[i-1])%=P;
}
int G(ll n){if(n<=sqr)return g[n];IT it=mp.find(n);if(it!=mp.end())return it->second;int res=calc3(n%P),las=1,now;for(ll i=2,j;i<=n;i=j+1)j=n/(n/i),now=calc2(j%P),res=(res-1ll*(now-las+P)*G(n/i)%P+P)%P,las=now;return mp[n]=res;
}
int main(){
//  freopen("testdata.in","r",stdin);scanf("%lld",&n),init(sqr=N-5);int res=0,las=0,now=0;for(R ll i=1,j;i<=n;i=j+1)j=n/(n/i),now=calc(j%P),(res+=1ll*(now-las+P)*G(n/i)%P)%=P,las=now;printf("%d\n",res);return 0;
}

转载于:https://www.cnblogs.com/bztMinamoto/p/10437280.html

[51nod1238] 最小公倍数之和 V3(杜教筛)相关推荐

  1. 51NOD 1220 约数之和(杜教筛)

    1220 约数之和 推式子 ∑i=1n∑j=1nd(i,j)=∑i=1n∑j=1n∑x∣i∑y∣j(gcd(x,y)=1)xjy=∑d=1ndμ(d)∑i=1nd∑x∣iix∑j=1nd∑y∣jj=∑ ...

  2. 51nod1238 最小公倍数之和 V3

    又被这神仙题给坑爆了. 神仙题解. 一开始我把lcm变成ij/gcd然后按照常规套路去推,推到最后发现不是miu * Id而是miu · Id......这还搞鬼啊. 正解居然跟这个差不多,先转成求其 ...

  3. 51nod1238. 最小公倍数之和 V3(数论)

    题目链接 https://www.51nod.com/Challenge/Problem.html#!#problemId=1238 题解 本来想做个杜教筛板子题结果用另一种方法过了...... 所谓 ...

  4. [51 nod 1238] 最小公倍数之和 V3(杜教筛)

    1238 最小公倍数之和 V3 推式子 ∑i=1n∑j=1nlcm(i,j)=∑i=1n∑j=1nijgcd(i,j)=∑d=1n∑i=1n∑j=1nijd(gcd(i,j)==d)=∑d=1nd∑i ...

  5. [51 nod 123] 最大公约数之和 V3(杜教筛)

    1237 最大公约数之和 V3 推式子 ∑i=1n∑j=1ngcd(i,j)=∑d=1nd∑i=1n∑j=1n(gcd(i,j)==d)=∑d=1nd∑i=1nd∑j=1nd(gcd(i,j)==1) ...

  6. 51nod1238(杜教筛)

    这个题暴露出杜教筛还是没掌握好.. 然后就是讨论一个常见的求和 然后原式就能化简成 然后窝就天真的吧这个和式拿去做杜教筛了...然而这个和式的一个问题是函数也是个和式,其卷积实在是难求,所以推到一半推 ...

  7. 51 NOD 1227 平均最小公倍数(杜教筛)

    1227 平均最小公倍数 推式子 S(n)=∑i=1n∑j=1ilcm(i,j)i=∑i=1n∑j=1iijigcd(i,j)=∑i=1n∑j=1ijgcd(i,j)=∑i=1n∑d=1i∑j=1ij ...

  8. 51nod 1220 约数之和【莫比乌斯反演+杜教筛】

    首先由这样一个式子:\( d(ij)=\sum_{p|i}\sum_{q|j}[gcd(p,q)==1]\frac{pj}{q} \)大概感性证明一下吧我不会证 然后开始推: \[ \sum_{i=1 ...

  9. 【51nod】1239 欧拉函数之和 杜教筛

    [题意]给定n,求Σφ(i),n<=10^10. [算法]杜教筛 [题解] 定义$s(n)=\sum_{i=1}^{n}\varphi(i)$ 杜教筛$\sum_{i=1}^{n}(\varph ...

最新文章

  1. JNI调用native方法出现 java.lang.UnsatisfiedLinkError: XXXclass.XXXmethod()异常的解决办法
  2. linux64平台上编译32位程序: GCC编译选项 -m64 -m32 -mx32
  3. ADO.NET中异步处理的方式
  4. linux通用中断子系统介绍
  5. R语言应用实战-基于R的C4.5算法和C5.0算法原理解析及应用案例
  6. c++静态库和动态库
  7. Linux终端打开一只小马,Linux 终端上的漂亮小马
  8. 真实收货地址大全2016_中国古典诗词大全汇集了诗经、唐诗、宋词、元曲以及纳兰词,12册精美套装。...
  9. javascript 对象(四)
  10. Day1通信基本概念 通信系统模型 通信系统分类与通信方式
  11. Verilog——7段数码管译码器
  12. Markdown必备,Lsky-pro图床配置
  13. 阿里云服务器ECS-Apollo搭建MQTT服务器(Windows环境)
  14. IIB接收SAP请求配置
  15. 布袋除尘器过滤风速多少_布袋除尘器过滤风速的选择!
  16. windows 7正版才是王道
  17. linux卸载k8s,K8S镜像删除及环境清理
  18. Qt --实现语音读文字功能
  19. 陌陌宣布改名“挚文集团”:旗下现有 App 名称保持不变
  20. 上海科技大学和南方科技大学计算机,你相信吗?这几所大学,20年后不比北大清华差...

热门文章

  1. 迭代var()内置函数的时候出现RuntimeError: dictionary changed size during iteration的解决办法...
  2. Chapter 9:Noise-Estimation Algorithms
  3. Java中String、StringBuffer和StringBuilder的区别
  4. 网民网上购物决策时间延长
  5. 各种flash的不同
  6. socket编程实践
  7. java期_java日期 时间
  8. eselasticsearch入门_ElasticSearch入门学习-基础示例(1)
  9. Python是世界上最好的语言,你不服不行!(附资料)
  10. python语音转文字源码_【python3】Python十行代码搞定文字转语音