Description

Input

一共T+1行

第1行为数据组数T(T<=10)

第2~T+1行每行一个非负整数N,代表一组询问

Output

一共T行,每行两个用空格分隔的数ans1,ans2

Sample Input

6

1

2

8

13

30

2333

Sample Output

1 1

2 0

22 -2

58 -3

278 -3

1655470 2

Solution

杜教筛裸题啊

对于 \(\mu\) ,利用与它有关的卷积 \(\mu*1=e\) ,杜教筛式子为 \(S(n)=1-\sum_{i=2}^nS(\lfloor\frac{n}{i}\rfloor)\)

对于 \(\varphi\) ,利用与它有关的卷积 \(\varphi*1=id\) ,杜教筛式子为 \(S(n)=\sum_{i=1}^ni-\sum_{i=2}^nS(\lfloor\frac{n}{i}\rfloor)\)

  1. #include<bits/stdc++.h>
  2. #define ui unsigned int
  3. #define ll long long
  4. #define db double
  5. #define ld long double
  6. #define ull unsigned long long
  7. const int MAXN=3000000+10;
  8. int t,n,vis[MAXN],prime[MAXN],cnt,phi[MAXN],mu[MAXN],smu[MAXN];
  9. ll sphi[MAXN];
  10. std::map<int,int> M;
  11. std::map<int,ll> P;
  12. namespace IO
  13. {
  14. const ui Buffsize=1<<15,Output=1<<23;
  15. static char Ch[Buffsize],*S=Ch,*T=Ch;
  16. inline char getc()
  17. {
  18. return((S==T)&&(T=(S=Ch)+fread(Ch,1,Buffsize,stdin),S==T)?0:*S++);
  19. }
  20. static char Out[Output],*nowps=Out;
  21. inline void flush(){fwrite(Out,1,nowps-Out,stdout);nowps=Out;}
  22. template<typename T>inline void read(T&x)
  23. {
  24. x=0;static char ch;T f=1;
  25. for(ch=getc();!isdigit(ch);ch=getc())if(ch=='-')f=-1;
  26. for(;isdigit(ch);ch=getc())x=x*10+(ch^48);
  27. x*=f;
  28. }
  29. template<typename T>inline void write(T x,char ch='\n')
  30. {
  31. if(!x)*nowps++='0';
  32. if(x<0)*nowps++='-',x=-x;
  33. static ui sta[111],tp;
  34. for(tp=0;x;x/=10)sta[++tp]=x%10;
  35. for(;tp;*nowps++=sta[tp--]^48);
  36. *nowps++=ch;
  37. }
  38. }
  39. using namespace IO;
  40. template<typename T> inline void chkmin(T &x,T y){x=(y<x?y:x);}
  41. template<typename T> inline void chkmax(T &x,T y){x=(y>x?y:x);}
  42. template<typename T> inline T min(T x,T y){return x<y?x:y;}
  43. template<typename T> inline T max(T x,T y){return x>y?x:y;}
  44. inline void init()
  45. {
  46. memset(vis,1,sizeof(vis));
  47. vis[0]=vis[1]=0;
  48. phi[1]=mu[1]=1;
  49. for(register int i=2;i<MAXN;++i)
  50. {
  51. if(vis[i])
  52. {
  53. prime[++cnt]=i;
  54. mu[i]=-1;phi[i]=i-1;
  55. }
  56. for(register int j=1;j<=cnt&&i*prime[j]<MAXN;++j)
  57. {
  58. vis[i*prime[j]]=0;
  59. if(i%prime[j])
  60. {
  61. mu[i*prime[j]]=mu[i]*mu[prime[j]];
  62. phi[i*prime[j]]=phi[i]*phi[prime[j]];
  63. }
  64. else
  65. {
  66. phi[i*prime[j]]=phi[i]*prime[j];
  67. break;
  68. }
  69. }
  70. }
  71. for(register int i=1;i<MAXN;++i)smu[i]=smu[i-1]+mu[i],sphi[i]=sphi[i-1]+phi[i];
  72. }
  73. inline int Smu(ll x)
  74. {
  75. if(x<MAXN)return smu[x];
  76. if(M.find(x)!=M.end())return M[x];
  77. int res=0;
  78. for(register ll i=2;;)
  79. {
  80. if(i>x)break;
  81. ll j=x/(x/i);
  82. res+=(j-i+1)*Smu(x/i);
  83. i=j+1;
  84. }
  85. return M[x]=1-res;
  86. }
  87. inline ll Sphi(ll x)
  88. {
  89. if(x<MAXN)return sphi[x];
  90. if(P.find(x)!=P.end())return P[x];
  91. ll res=0;
  92. for(register ll i=2;;)
  93. {
  94. if(i>x)break;
  95. ll j=x/(x/i);
  96. res+=1ll*(j-i+1)*Sphi(x/i);
  97. i=j+1;
  98. }
  99. return P[x]=1ll*(x+1)*x/2-res;
  100. }
  101. int main()
  102. {
  103. init();read(t);
  104. while(t--)read(n),write(Sphi(n),' '),write(Smu(n),'\n');
  105. flush();
  106. return 0;
  107. }

【刷题】BZOJ 3944 Sum的更多相关文章

  1. ●杜教筛入门(BZOJ 3944 Sum)

    入门杜教筛啦. http://blog.csdn.net/skywalkert/article/details/50500009(好文!) 可以在$O(N^{\frac{2}{3}})或O(N^{\f ...

  2. BZOJ 3944: Sum [杜教筛]

    3944: Sum 贴模板 总结见学习笔记(现在还没写23333) #include <iostream> #include <cstdio> #include <cst ...

  3. bzoj 3944: Sum(杜教筛)

    3944: Sum Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 4930  Solved: 1313[Submit][Status][Discuss ...

  4. BZOJ 3944 Sum

    题目链接:Sum 嗯--不要在意--我发这篇博客只是为了保存一下杜教筛的板子的-- 你说你不会杜教筛?有一篇博客写的很好,看完应该就会了-- 这道题就是杜教筛板子题,也没什么好讲的-- 下面贴代码(不 ...

  5. BZOJ.3944.Sum(Min_25筛)

    BZOJ 洛谷 不得不再次吐槽洛谷数据好水(连\(n=0,2^{31}-1\)都没有). \(Description\) 给定\(n\),分别求\[\sum_{i=1}^n\varphi(i),\qu ...

  6. bzoj 3944 Sum —— 杜教筛

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3944 杜教筛入门题! 看博客:https://www.cnblogs.com/zjp-sha ...

  7. LeetCode刷题 1. Two Sum 两数之和 详解 C++语言实现 java语言实现

    1. Two Sum 两数之和 Given an array of integers, return indices of the two numbers such that they add up ...

  8. 【leetcode刷题笔记】Sum Root to Leaf Numbers

    Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a number ...

  9. bzoj 3944: Sum【莫比乌斯函数+欧拉函数+杜教筛】

    一道杜教筛的板子题. 两个都是积性函数,所以做法是一样的.以mu为例,设\( f(n)=\sum_{d|n}\mu(d) g(n)=\sum_{i=1}^{n}f(i) s(n)=\sum_{i=1} ...

随机推荐

  1. CAN2.0A 和CAN2.0B

    CAN2.0A 和CAN2.0B 原创 2015年08月03日 16:03:08 3969 CAN2.0A 是CAN协议的PART A部分,此部分定义了11bit的标识区 .CAN2.0B 是CAN协 ...

  2. java中CyclicBarrier简单入门使用

    一个同步辅助类,它同意一组线程互相等待,直到到达某个公共屏障点 (common barrier point). 在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待.此时 CyclicBarr ...

  3. 2.3《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——重命名,复制,删除

    最常用的文件操作除了将文件列出来外,就应该是重命名,复制,删除了.正如将文件列出来一样,大多数现代操作系统为这些任务提供了用户图形界面,但是在许多场景中,用命令行还是会更方便. 使用mv命令重命名一个 ...

  4. # 2017-2018-2 20155319 『网络对抗技术』Exp8:Web基础

    2017-2018-2 20155319 『网络对抗技术』Exp8:Web基础 一.原理与实践说明 1.实践具体要求 (1).Web前端HTML(0.5分) 能正常安装.启停Apache.理解HTML ...

  5. 全方位Bindind分析

    Binding,音译为绑定,通道捆她想一条数据的高速绑着“源”与“目标”: “源”乃提供数据的一方:“目标”乃接收数据并作出相应反应的一方: 过程感觉就像是,给一个“激励”,就会作出“反应”那样--- ...

  6. 【Qt】QLabel之动态阴影边框

    效果如下: 实现思路参考了下面的文章: Qt 之 QPropertyAnimation 该文章是自定义属性alpha,原理类似,代码如下: //在头文件加入 Q_PROPERTY(int iBorde ...

  7. sql——sql中的各种连接

    现有两张表 tablea 和 tableb     各种连接 1.笛尔卡积 SELECT * FROM TabA a,TabB b where a.id = b.id /*笛尔卡积乘积*/ 返回的结果 ...

  8. Flutter - 创建侧滑菜单(不使用navigatior,仅改变content)

    之前写过一篇文章,Flutter - 创建横跨所有页面的侧滑菜单.这个里面中使用了Navigator.of(context).push来导航到新的页面. 这次介绍一种不使用导航,仅仅改变content ...

  9. Html_兼容性

    那么如何禁止使用IE8兼容模式解析网页呢?在IE8以上版本的浏览器增加了一个X-UA-Compatible 头标记,用于为IE8指定不同的页面渲染模式. <meta http-equiv=&qu ...

  10. LAXCUS大数据操作系统节点挂掉后的处理

    昨天回公司加班跑一个LAXCUS大数据应用,JVM直接挂了,没有留下任何异常信息,查看代码,也没有内存泄漏的问题.百思不得姐,只好去求教LAXCUS大数据操作系统的技术客服,客服查看了故障节点配置.日 ...