题意:给定函数\(f(x)\),有\(n^2-3*n+2=\sum_{d|n}f(d)\),求\(\sum_{i=1}^nf(i)\)

题解:很显然的杜教筛,假设\(g(n)=n^2-3*n+2\),那么有\(g=f*I\),由莫比乌斯反演,\(f=g*\mu\),可以O(nlogn)预处理到1e6,剩余部分杜教筛

我们先观察杜教筛的推导过程,假设要求\(s(n)=\sum_{i=1}^nf(i)\),

\(\sum_{i=1}^ng*f=\sum_{i=1}^n\sum_{d|i}g(d)f(\frac{i}{d})=\sum_{d=1}^ng(d)\sum_{i=1}^{\lfloor \frac{n}{d} \rfloor}f(i)=\sum_{d=1}^ng(d)S(\lfloor \frac{n}{d} \rfloor)\)

\(S(n)=\sum_{i=1}^ng*f-\sum_{i=1}^ng(d)S(\lfloor \frac{n}{d} \rfloor)\)

我们考虑s就是我们要求的答案,g是常函数,那么I*f就是g,所以前半部分即\(\sum_{i=1}^ng(i)\)

分块处理后半部分,复杂度\(O(n^{\frac{2}{3})\)

  1. //#pragma GCC optimize(2)
  2. //#pragma GCC optimize(3)
  3. //#pragma GCC optimize(4)
  4. //#pragma GCC optimize("unroll-loops")
  5. //#pragma comment(linker, "/stack:200000000")
  6. //#pragma GCC optimize("Ofast,no-stack-protector")
  7. //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
  8. #include<bits/stdc++.h>
  9. #define fi first
  10. #define se second
  11. #define db double
  12. #define mp make_pair
  13. #define pb push_back
  14. #define pi acos(-1.0)
  15. #define ll long long
  16. #define vi vector<int>
  17. #define mod 1000000007
  18. #define ld long double
  19. #define C 0.5772156649
  20. #define ls l,m,rt<<1
  21. #define rs m+1,r,rt<<1|1
  22. #define pll pair<ll,ll>
  23. #define pil pair<int,ll>
  24. #define pli pair<ll,int>
  25. #define pii pair<int,int>
  26. //#define cd complex<double>
  27. #define ull unsigned long long
  28. #define base 1000000000000000000
  29. #define Max(a,b) ((a)>(b)?(a):(b))
  30. #define Min(a,b) ((a)<(b)?(a):(b))
  31. #define fin freopen("a.txt","r",stdin)
  32. #define fout freopen("a.txt","w",stdout)
  33. #define fio ios::sync_with_stdio(false);cin.tie(0)
  34. template<typename T>
  35. inline T const& MAX(T const &a,T const &b){return a>b?a:b;}
  36. template<typename T>
  37. inline T const& MIN(T const &a,T const &b){return a<b?a:b;}
  38. inline void add(ll &a,ll b){a+=b;if(a>=mod)a-=mod;}
  39. inline void sub(ll &a,ll b){a-=b;if(a<0)a+=mod;}
  40. inline ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
  41. inline ll qp(ll a,ll b){ll ans=1;while(b){if(b&1)ans=ans*a%mod;a=a*a%mod,b>>=1;}return ans;}
  42. inline ll qp(ll a,ll b,ll c){ll ans=1;while(b){if(b&1)ans=ans*a%c;a=a*a%c,b>>=1;}return ans;}
  43. using namespace std;
  44. const double eps=1e-8;
  45. const ll INF=0x3f3f3f3f3f3f3f3f;
  46. const int N=1000000+10,maxn=3000000+10,inf=0x3f3f3f3f;
  47. int prime[N],cnt,mu[N];
  48. bool mark[N];
  49. ll f[N];
  50. map<ll,ll>ff;
  51. map<ll,ll>::iterator it1;
  52. ll inv3=qp(3,mod-2);
  53. void init()
  54. {
  55. mu[1]=1;
  56. for(int i=2;i<N;i++)
  57. {
  58. if(!mark[i])prime[++cnt]=i,mu[i]=-1;
  59. for(int j=1;j<=cnt&&i*prime[j]<N;j++)
  60. {
  61. mark[i*prime[j]]=1;
  62. if(i%prime[j]==0)
  63. {
  64. mu[i*prime[j]]=0;
  65. break;
  66. }
  67. mu[i*prime[j]]=-mu[i];
  68. }
  69. }
  70. for(int i=1;i<N;i++)
  71. for(int j=i;j<N;j+=i)
  72. {
  73. ll te=1ll*(j/i-2)*(j/i-1)*mu[i];
  74. te=(te%mod+mod)%mod;
  75. add(f[j],te);
  76. }
  77. // printf("%lld\n",f[1000000]);
  78. for(int i=1;i<N;i++)add(f[i],f[i-1]);
  79. }
  80. ll getf(ll n)
  81. {
  82. if(n<N)return f[n];
  83. if((it1=ff.find(n))!=ff.end())return it1->se;
  84. ll ans=n*(n+1)%mod*(n-4)%mod*inv3%mod+2ll*n%mod;
  85. ans=(ans%mod+mod)%mod;
  86. for(ll i=2,j;i<=n;i=j+1)
  87. {
  88. j=n/(n/i);
  89. sub(ans,1ll*(j-i+1)*getf(n/i)%mod);
  90. }
  91. return ff[n]=ans;
  92. }
  93. int main()
  94. {
  95. init();
  96. int T;scanf("%d",&T);
  97. while(T--)
  98. {
  99. ll n;scanf("%lld",&n);
  100. printf("%lld\n",getf(n));
  101. }
  102. return 0;
  103. }
  104. /********************
  105. ********************/

hdu5608杜教筛的更多相关文章

  1. 51nod 1244 莫比乌斯函数之和(杜教筛)

    [题目链接] http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1244 [题目大意] 计算莫比乌斯函数的区段和 [题解] 利 ...

  2. 51nod 1237 最大公约数之和 V3(杜教筛)

    [题目链接] https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1237 [题目大意] 求[1,n][1,n]最大公约数之和 ...

  3. 杜教筛 && bzoj3944 Sum

    Description Input 一共T+1行 第1行为数据组数T(T<=10) 第2~T+1行每行一个非负整数N,代表一组询问 Output 一共T行,每行两个用空格分隔的数ans1,ans ...

  4. 51NOD 1220 约数之和 [杜教筛]

    1220 约数之和 题意:求\(\sum_{i=1}^n \sum_{j=1}^n \sigma_1(ij)​\) \[ \sigma_0(ij) = \sum_{x\mid i}\sum_{y\mi ...

  5. BZOJ 4176: Lucas的数论 [杜教筛]

    4176: Lucas的数论 题意:求\(\sum_{i=1}^n \sum_{j=1}^n \sigma_0(ij)\) \(n \le 10^9\) 代入\(\sigma_0(nm)=\sum_{ ...

  6. 51NOD 1222 最小公倍数计数 [莫比乌斯反演 杜教筛]

    1222 最小公倍数计数 题意:求有多少数对\((a,b):a<b\)满足\(lcm(a,b) \in [1, n]\) \(n \le 10^{11}\) 卡内存! 枚举\(gcd, \fra ...

  7. 51NOD 1237 最大公约数之和 V3 [杜教筛]

    1237 最大公约数之和 V3 题意:求\(\sum_{i=1}^n\sum_{j=1}^n(i,j)\) 令\(A(n)=\sum_{i=1}^n(n,i) = \sum_{d\mid n}d \c ...

  8. hihocoder #1456 : Rikka with Lattice(杜教筛)

    hihocoder #1456 : Rikka with Lattice(杜教筛) 题意 : 给你一个\(n*m\)方格图,统计上面有多少个格点三角形,除了三个顶点,不覆盖其他的格点(包括边和内部). ...

  9. 【BZOJ4805】欧拉函数求和(杜教筛)

    [BZOJ4805]欧拉函数求和(杜教筛) 题面 BZOJ 题解 好久没写过了 正好看见了顺手切一下 令\[S(n)=\sum_{i=1}^n\varphi(i)\] 设存在的某个积性函数\(g(x) ...

随机推荐

  1. Visual Studio Code配置Python开发环境

    1.安装Python插件 在VScode界面按Crtl+Shift+P或者F1 输入ext install 直接安装Python,也就是点击它,然后等待,安装好后会提示你重启 2.配置运行Python ...

  2. oracle单行函数 之 转换函数

    to_char(字符串 \ 列, 格式字符串):将日期或者数字变成为字符串显示 注意点:时间字符串或时间类型列  与  格式字符串  必须是一一对应,若是多了少了相关字符会报错(除了使用systemd ...

  3. Codeforces 808G Anthem of Berland(KMP+基础DP)

    题意 给定一个字符串 \(s\) ,一个字符串 \(t\) ,其中 \(s\) 包含小写字母和 "?" ,\(t\) 只包含小写字母,现在把 \(s\) 中的问号替换成任意的小写字 ...

  4. js replace使用及正则表达式使用

    本文为博主原创,未经允许不得转载: js中replace方法与java中的replace方法相同,主要做替换. 表达式:stringObj.replace(rgExp, replaceText) 参数 ...

  5. 【使用指南】WijmoJS 前端开发工具包

    为方便广大前端开发人员更好的使用 WijmoJS 前端开发工具包,葡萄城专门推出了 WijmoJS 使用指南,该指南详细地介绍了如何把 WijmoJS 各种强大的功能应用到您自己的 Web 项目中,助 ...

  6. poi导出excel 并处理插入网络图片 范例 处理文件下载中文乱码

    package com.inborn.inshop.controller.product; import com.inborn.inshop.common.util.DateUtils;import ...

  7. win7 "com surrogate“ 已停止工作的解决办法

    1.在文件夹选项里选“始终显示图标,从不显示缩略图”. 2.数据执行保护(DEB),依次打开:计算机——属性——高级系统设置——高级——性能——设置——数据执行保护 选下面的单选按钮“为除下列选定程序 ...

  8. SAP 财务模块 FI-TV 差旅管理

    SAP 财务模块 FI-TV 差旅管理 Travel Management差旅管理事务码              描述PRT3      Trip Costs: Maintain Postings ...

  9. 1 --- Vue 基础指令

    1.vue 指令 1.v-model  主要在表单中使用,文本框.teaxare.单选.下拉 等 2.v-text   文本渲染  类似{{}} 3.v-show  控制Dom显示隐藏   displ ...

  10. 前端调用后端接口下载excel文件的几种方式

    今天有一个导出相应数据为excel表的需求.后端的接口返回一个数据流,一开始我用axios(ajax类库)调用接口,返回成功状态200,但是!但是浏览器没有自动下载excel表,当时觉得可能是ajax ...