题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1575

万年巨坑终于填掉了……

首先是煞笔西瓜的做题历程O_O。

原题要求$\sum_{i=1}^n\sum_{j=1}^i\sum_{k=1}^i [(i,j),(i,k)]$

那么先推一波式子吧

balabala

我也忘记自己是怎么推的了(雾

总之最后推出来是这样的

$ ans=\sum_{i=1}^{n} f(\left\lfloor\frac{n}{i}\right\rfloor)*g(i) $

其中 $ f(x)=\sum_{i=1}^{x} μ(i)*i^2*\frac{\frac{x}{i}(\frac{x}{i}+1)}{2} $  ,$ g(x)=[\sum_{d|x} \frac{x}{d}*φ(d)]^2 $

然后接下来的问题就是怎么求f(x)的值和g(x)的前缀和了,求出来就能分段计算辣。

嗯……

想想怎么求……

$ μ(i)*i^2 $ 可以用杜教筛直接求嘛,然后f(x)就可以O(3/4)分段求,可是在总式里面再跑一次分段的话复杂度会……诶,不管了,先写。

g(x)的前缀和可以洲阁筛求,嗯,码码码……(这么复杂的题怎么才7级?

啊,T了,意料之中……

改改改

跑得越来越快了……

诶,极限数据要跑两秒多,可是10组数据的话还是要10多秒

改不动,弃坑……

(51nod群上问了下,夹克老爷说他不会。

问问YJQ

他说$ \sum_{j=1}^i\sum_{k=1}^i [(i,j),(i,k)] $ 这东西是个积性函数。

所以直接用洲阁筛对这个东西求前缀和就好了(掀桌……

也就是说,看到题目,你开始推式子,你就输辣。

具体来说,对于一个质数$ p $,当 $ i=p^k $ 时,$ \sum_{j=1}^i\sum_{k=1}^i [(i,j),(i,k)] =(2k+1)*(p^{2k}-p^{2k-1})+p^{k-1} $

优越写法才2.8k,第一种方法直接上5k……

代码不贴辣。

upd at 2017.4.26好像这题烂大街了,我来发个洲阁筛模板吧

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. #include<cmath>
  5. #define ui unsigned int
  6. #define ull unsigned long long
  7. #define MN 100001
  8. #define SQ 64000
  9. using namespace std;
  10. ui read_p,read_ca;
  11. inline ui read(){
  12. read_p=;read_ca=getchar();
  13. while(read_ca<''||read_ca>'') read_ca=getchar();
  14. while(read_ca>=''&&read_ca<='') read_p=read_p*+read_ca-,read_ca=getchar();
  15. return read_p;
  16. }
  17. const ui HA=1e6+;
  18. ui T,n,MMH,p[MN/],_p[MN/],num=,TTT,O,Num,f[SQ],_S[SQ],G_2[SQ],G_1[SQ],G_0[SQ],_T[SQ],P_P[MN/],_G_2[MN/],_G_1[MN/],_O[SQ],_Num,_l[HA],NNN=,LL;bool bo[MN];
  19. ui gcd(ui x,ui y){return y?gcd(y,x%y):x;}
  20. ui _b_y[HA],_b_z[HA],_b_ne[HA];
  21. inline void _in(ui x,ui y,ui z){_b_y[++_Num]=y;_b_z[_Num]=z;_b_ne[_Num]=_l[x];_l[x]=_Num;}
  22. inline ui Q_2(ui x){if (x%==)return (ull)(x+x+)*(x+)/*x;else if (x%==) return (ull)(x+x+)*x/*(x+);else return (ull)x*(x+)/*(x+x+);}
  23. inline ui Q_1(ui x){return (ull)x*(x+)>>;}
  24. inline ui sqr(ui x){return x*x;}
  25. inline ui min(ui a,ui b){return a<b?a:b;}
  26. inline ui find(ui x){
  27. if (x<HA) return _b_z[_l[x]];
  28. register ui i;
  29. for (i=_l[x%HA];i;i=_b_ne[i]) if (_b_y[i]==x) return _b_z[i];
  30. return ;
  31. }
  32. inline ui Mmh(ui n){
  33. register ui i,j,c;ui o=sqrt(n)+1e-,MMH=,k=,R,Ls,Rs,P,SS=;ull x,Q,O_O;
  34. while (p[LL+]<=o&&LL<num) LL++;
  35. for (i=;i<=n;i=j+) j=n/(c=n/i),_S[++k]=c,_in(c%HA,c,k),_T[k]=f[k]=,G_2[k]=Q_2(c),G_1[k]=Q_1(c),G_0[k]=c;
  36. for (i=k,j=;i;_O[i--]=j) while (_S[i]>=p[j+]) j++;
  37. for (f[i=]=,P=Ls=Rs=k;i<=LL;i++){
  38. if (i==) while (_S[P]<_p[i]&&P) P--;else P=Rs;
  39. while (_S[Rs]<_p[i+]&&Rs) SS+=f[Rs--];
  40. while (_S[Ls]<p[i+]&&Ls) SS-=f[Ls--];
  41. if (i!=LL) MMH+=SS*P_P[i+];
  42. for (j=P;j;j--)
  43. if (f[j]){
  44. for (x=p[i],Q=,c=;x<=_S[j];x*=p[i],Q*=p[i],c++){
  45. R=find(_S[j]/x);
  46. f[R]+=(O_O=f[j]*((*c+)*(p[i]-)*sqr(Q)*p[i]+Q));if (Ls>=R&&R>Rs) SS+=O_O;
  47. if (i!=LL) if (_S[R]>=p[i+]&&_S[R]<_p[i+]) MMH+=O_O*P_P[i+];
  48. }
  49. }
  50. for (j=;j<=P;j++)
  51. if (_S[j]>=p[i]) c=min(i-,_O[R=find(_S[j]/p[i])]),
  52. G_2[j]-=_p[i]*(G_2[R]-(_G_2[c]-_G_2[_T[R]]))+(_G_2[i-]-_G_2[_T[j]]),
  53. G_1[j]-=p[i]*(G_1[R]-(_G_1[c]-_G_1[_T[R]]))+(_G_1[i-]-_G_1[_T[j]]),
  54. G_0[j]-=(G_0[R]-(c-_T[R]))+(i--_T[j]),_T[j]=i;
  55. }
  56. for (j=;j<=k;j++) c=min(LL,_O[j]),G_2[j]-=_G_2[c]-_G_2[_T[j]],G_1[j]-=_G_1[c]-_G_1[_T[j]],G_0[j]-=c-_T[j];
  57. for (i=;i<=k;i++) MMH+=f[i]*((G_2[i]-G_1[i])*+G_0[i]),_l[_S[k]%HA]=;
  58. return _Num=,MMH;
  59. }
  60. int main(){
  61. register ui i,j;
  62. for (i=;i<MN;i++){
  63. if (!bo[i]) p[++num]=i,_p[num]=p[num]*p[num],_G_2[num]=_G_2[num-]+_p[num],_G_1[num]=_G_1[num-]+p[num],P_P[num]=*p[num]*(p[num]-)+;
  64. for (j=;j<=num&&(O=i*p[j])<MN;j++){
  65. bo[O]=;
  66. if (!i%p[j]) break;
  67. }
  68. }
  69. T=read();while(T--){
  70. n=read();
  71. printf("%u\n",Mmh(n));
  72. }
  73. }

51nod 1575 Gcd and Lcm的更多相关文章

  1. 51Nod 2026 Gcd and Lcm

    题目传送门 分析: 开始玩一个小小的trick 我们发现\(f(n)=\sum_{d|n}\mu(d)\cdot d\)是一个积性函数 所以: \(~~~~f(n)=\prod f(p_i^{a_i} ...

  2. HDOJ 4497 GCD and LCM

    组合数学 GCD and LCM Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) ...

  3. hdu 4497 GCD and LCM 数学

    GCD and LCM Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4 ...

  4. GCD 与 LCM UVA - 11388

    题目链接: https://cn.vjudge.net/problem/23709/origin 本题其实有坑 数据大小太大, 2的32次方,故而一定是取巧的算法,暴力不可能过的 思路是最大公因数的倍 ...

  5. 简单数论总结1——gcd与lcm

    并不重要的前言 最近学习了一些数论知识,但是自己都不懂自己到底学了些什么qwq,在这里把知识一并总结起来. 也不是很难的gcd和lcm 显而易见的结论: 为什么呢? 根据唯一分解定理: a和b都可被分 ...

  6. poj 2429 GCD &amp; LCM Inverse 【java】+【数学】

    GCD & LCM Inverse Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 9928   Accepted:  ...

  7. HDU 4497 GCD and LCM (合数分解)

    GCD and LCM Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total ...

  8. hdu4497 GCD and LCM

    GCD and LCM Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) Total S ...

  9. HDU 4497 GCD and LCM(数论+容斥原理)

    GCD and LCM Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total ...

随机推荐

  1. (五):C++分布式实时应用框架——支撑复杂的业务通讯关系

    C++分布式实时应用框架--支撑复杂的业务通讯关系 技术交流合作QQ群:436466587 欢迎讨论交流 版权声明:本文版权及所用技术归属smartguys团队所有,对于抄袭,非经同意转载等行为保留法 ...

  2. VM虚拟机连Linux黑屏问题

    在尝试了关闭VM的加速3D图形后,若仍黑屏(但是挂起时却能显示),可以尝试在以管理员身份cmd中输入netsh winsock reset,重启后可以恢复正常.这个问题似乎与网络某个端口有关,我上次打 ...

  3. NSQ之粗读浅谈

    回顾: 以前一直是C++开发(客户端),最近听同事讲go语言不错,随后便决定先从go语法开始投向go的怀抱.由于历史原因学习go语法时,用了半天的时间看完了菜鸟教程上相关资料,后来又看了易百教程上的一 ...

  4. Mac shell笔记

    用来自动执行一些前端发布的操作. 脚本: # webReleasePath用来发布的目录,webRevisionPath是开发的目录 webReleasePath='/Users/lufeng/Doc ...

  5. 阿里云 Angular 2 UI框架 NG-ZORRO介绍

    说明: Angular2出来后,一直想找个基于Angular2的前端后台管理框架,但一直没有找到比较适合的.前段时间在Angular官网资源无意之间看到NG-ZORRO,NG-ZORRO由阿里计算平台 ...

  6. 第2章KNN算法笔记_函数classify0

    <机器学习实战>知识点笔记目录 K-近邻算法(KNN)思想: 1,计算未知样本与所有已知样本的距离 2,按照距离递增排序,选前K个样本(K<20) 3,针对K个样本统计各个分类的出现 ...

  7. openstack ocata版本简化安装

    Network Time Protocol (NTP) Controller Node apt install chrony Edit the /etc/chrony/chrony.conf 添加如下 ...

  8. windows日志监控

    bat脚本,主要作用,每个五分钟读取日文本件中新增内容,进行错误赛选,如果有错误信息,将错误信息用邮件发送给管理员. 其中awk和sed需要手动下载 :读取number.txt文档,获取上一次执行时文 ...

  9. 9.nginx使用redis用缓存

    需要使用到的第三方模块,因为在有道笔记上面,所以为办法直接给你们,需要的话给我私信或者邮件(913956964@qq.com) 1.编译安装,添加上述扩展插件 ./configure --prefix ...

  10. RabbitMQ教程(一) ——win7下安装RabbitMQ

    RabbitMQ依赖erlang,所以先安装erlang,然后再安装RabbitMQ; 下载RabbitMQ,下载地址: rabbitmq-server-3.5.6.exe和erlang,下载地址:o ...