\(\color{#0066ff}{ 题目描述 }\)

给定一个正整数\(N(N\le2^{31}-1)\)

\(ans_1=\sum_{i=1}^n\varphi(i)\)

\(ans_2=\sum_{i=1}^n \mu(i)\)

\(\color{#0066ff}{输入格式}\)

一共T+1行 第1行为数据组数T(T<=10) 第2~T+1行每行一个非负整数N,代表一组询问

\(\color{#0066ff}{输出格式}\)

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

\(\color{#0066ff}{输入样例}\)

  1. 6
  2. 1
  3. 2
  4. 8
  5. 13
  6. 30
  7. 2333

\(\color{#0066ff}{输出样例}\)

  1. 1 1
  2. 2 0
  3. 22 -2
  4. 58 -3
  5. 278 -3
  6. 1655470 2

\(\color{#0066ff}{数据范围与提示}\)

none

\(\color{#0066ff}{ 题解 }\)

可以用min_25筛写

对于\(\varphi\)

要拆成两个,一个0次项,一个1次项

在收集答案的时候直接加它们两个的差即可

对于\(\mu\)

因为只要指数超过1,就是0了,没用的,不同统计,直接统计1次的就行

  1. #include<bits/stdc++.h>
  2. #define LL long long
  3. LL in() {
  4. char ch; LL x = 0, f = 1;
  5. while(!isdigit(ch = getchar()))(ch == '-') && (f = -f);
  6. for(x = ch ^ 48; isdigit(ch = getchar()); x = (x << 1) + (x << 3) + (ch ^ 48));
  7. return x * f;
  8. }
  9. const int maxn = 2e6 + 10;
  10. LL g0[maxn], g1[maxn], a[maxn];
  11. int pri[maxn];
  12. int m, sqt, n, tot;
  13. int getid(LL x) { return x <= sqt? x : m - n / x + 1; }
  14. LL getphi(LL a, int b) {
  15. if(a < pri[b]) return 0;
  16. LL ans = (g1[getid(a)] - g1[getid(pri[b - 1])]) - (g0[getid(a)] - g0[getid(pri[b - 1])]);
  17. for(int i = b; i <= tot && (LL)pri[i] * pri[i] <= a; i++)
  18. for(LL x = pri[i], f = pri[i] - 1; x * pri[i] <= a; x *= pri[i], f *= pri[i])
  19. //phi[p^2]的贡献是p*(p-1)
  20. ans += (getphi(a / x, i + 1) * f + f * pri[i]);
  21. return ans;
  22. }
  23. LL getmu(LL a, int b) {
  24. if(a < pri[b]) return 0;
  25. LL ans = -g0[getid(a)] + g0[getid(pri[b - 1])];
  26. //只需枚举质数,次数就是1即可
  27. for(int i = b; i <= tot && (LL)pri[i] * pri[i] <= a; i++)
  28. //乘的那个f是-1,所以直接减,加的那个f是平方项=0, 不用管
  29. ans -= getmu(a / pri[i], i + 1);
  30. return ans;
  31. }
  32. int main() {
  33. for(int T = in(); T --> 0;) {
  34. n = in();
  35. sqt = sqrt(n);
  36. m = tot = 0;
  37. for(int i = 1; i <= n; i = a[m] + 1)
  38. a[++m] = n / (n / i), g0[m] = a[m] - 1, g1[m] = a[m] * (a[m] + 1) / 2 - 1;
  39. for(int i = 2; i <= sqt; i++) {
  40. if(g0[i] != g0[i - 1]) {
  41. LL sqr = i * i;
  42. pri[++tot] = i;
  43. for(int j = m; a[j] >= sqr; j--) {
  44. int id = getid(a[j] / i);
  45. g0[j] -= g0[id] - g0[i - 1];
  46. g1[j] -= i * (g1[id] - g1[i - 1]);
  47. }
  48. }
  49. }
  50. printf("%lld %lld\n", getphi(n, 1) + 1, getmu(n, 1) + 1);
  51. }
  52. return 0;
  53. }

P4213 【模板】杜教筛(Sum) min_25筛的更多相关文章

  1. 【51NOD 1847】奇怪的数学题(莫比乌斯反演,杜教筛,min_25筛,第二类斯特林数)

    [51NOD 1847]奇怪的数学题(莫比乌斯反演,杜教筛,min_25筛,第二类斯特林数) 题面 51NOD \[\sum_{i=1}^n\sum_{j=1}^nsgcd(i,j)^k\] 其中\( ...

  2. 【LOJ#572】Misaka Network 与求和(莫比乌斯反演,杜教筛,min_25筛)

    [LOJ#572]Misaka Network 与求和(莫比乌斯反演,杜教筛,min_25筛) 题面 LOJ \[ans=\sum_{i=1}^n\sum_{j=1}^n f(gcd(i,j))^k\ ...

  3. [模板] 杜教筛 && bzoj3944-Sum

    杜教筛 浅谈一类积性函数的前缀和 - skywalkert's space - CSDN博客 杜教筛可以在\(O(n^{\frac 23})\)的时间复杂度内利用卷积求出一些积性函数的前缀和. 算法 ...

  4. luoguP4213 [模板]杜教筛

    https://www.luogu.org/problemnew/show/P4213 同 bzoj3944 考虑用杜教筛求出莫比乌斯函数前缀和,第二问随便过,第一问用莫比乌斯反演来做,中间的整除分块 ...

  5. LOJ572. 「LibreOJ Round #11」Misaka Network 与求和 [莫比乌斯反演,杜教筛,min_25筛]

    传送门 思路 (以下令\(F(n)=f(n)^k\)) 首先肯定要莫比乌斯反演,那么可以推出: \[ ans=\sum_{T=1}^n \lfloor\frac n T\rfloor^2\sum_{d ...

  6. BZOJ.3944.Sum(Min_25筛)

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

  7. 洛谷P4213(杜教筛)

    #include <bits/stdc++.h> using namespace std; typedef long long LL; const int maxn = 3e6 + 3; ...

  8. LG4213 【模板】杜教筛(Sum)和 BZOJ4916 神犇和蒟蒻

    P4213 [模板]杜教筛(Sum) 题目描述 给定一个正整数$N(N\le2^{31}-1)$ 求 $$ans_1=\sum_{i=1}^n\varphi(i)$$ $$ans_2=\sum_{i= ...

  9. min_25筛入门

    目录 1.什么是min_25筛 2.前置知识 2.1.数论函数 2.2.埃拉托色尼筛 2.3.欧拉筛 3.min_25筛 3.1.计算质数贡献 3.2.计算总贡献 3.3.实现 4.例题 4.1.[L ...

随机推荐

  1. O2O和B2C、C2C的区别

    B2C.C2C是在线支付,购买的商品会塞到箱子里通过物流公司送到你手中;O2O是在线支付,购买线下的商品.服务,再到线下去享受服务. O2O模式的核心很简单,就是把线上的消费者带到现实的商店中去.在线 ...

  2. IIS安装与部署,站点的部署与配置

    第一章:IIS安装与部署 一,服务器概念的理解: 将设计好的软件只要部署到一台机器(服务器--->IIS)上,其它的员工通过浏览器(网址.)来进行访问. 做好的网站必须部署到这台机器上的IIS中 ...

  3. SQLServer数据库中开启CDC导致事务日志空间被占满的原因

    SQLServer数据库中开启CDC导致事务日志空间被占满的原因 转载  2017-04-01   投稿:mrr    我要评论 这篇文章主要介绍了SQLServer数据库中开启CDC导致事务日志空间 ...

  4. JS中,根据div数值判断弹出窗口

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. JSP 按钮点击,onclick事件中的AJAX不执行可能的原因

    <button onclick="deleteAccount()"  >删除</button> 缺少了 type="button" &l ...

  6. 超详细的Maven使用教程

    原文:  http://blog.csdn.net/u010425776/article/details/52027706 主题 Maven 什么是Maven? 如今我们构建一个项目需要用到很多第三方 ...

  7. 【264】◀▶ Windows 批处理(CMD)

    参考:Windows Commands 微软官方帮助 参考:DOS命令自学小窍门:巧用help命令 参考:bat批处理的注释语句 打开文件夹: start D:\abc 打开D盘abc文件夹 打开ex ...

  8. Oracle pl/sql 显示游标和隐式游标

    显示游标 一.定义语法:        CURSOR <游标名> IS         <SELECT 语句>         [FOR UPDATE | FOR UPDATE ...

  9. 错误信息:"OraOLEDB.Oracle" 返回了消息 "ORA-12154: TNS: 无法解析指定的连接标识符

    错误信息:"OraOLEDB.Oracle" 返回了消息 "ORA-12154: TNS: 无法解析指定的连接标识符 链接服务器"NC"的 OLE D ...

  10. Angular04 组件动态地从外部接收值、在组件中使用组件

    一.组件从外部接收值 1 修改组件的ts文件,让组件的属性可以从外部接收值 1.1 导入Input注解对象 1.2 在属性变量前面添加 @Input() 注解 1.3 去掉构造器中的属性变量赋值语句 ...