Description

去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么喜欢了。

在整理以前的试题时,发现了这样一道题目“求Sigma(f(i)),其中1<=i<=N”,其中 表示i的约数个数。他现在长大了,题目也变难了。

求如下表达式的值:

其中 表示ij的约数个数。

他发现答案有点大,只需要输出模1000000007的值。

Input

第一行一个整数n。

Output

一行一个整数ans,表示答案模1000000007的值。

Sample Input

2

Sample Output

8

HINT

对于100%的数据n <= 10^9。

Solution

弱化版在【刷题】BZOJ 3994 [SDOI2015]约数个数和

式子一模一样

把最后的式子用杜教筛求就好了

  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=1000000+10,Mod=1e9+7;
  8. int n,cnt,vis[MAXN],prime[MAXN],mu[MAXN],s[MAXN];
  9. std::map<int,ll> M;
  10. template<typename T> inline void read(T &x)
  11. {
  12. T data=0,w=1;
  13. char ch=0;
  14. while(ch!='-'&&(ch<'0'||ch>'9'))ch=getchar();
  15. if(ch=='-')w=-1,ch=getchar();
  16. while(ch>='0'&&ch<='9')data=((T)data<<3)+((T)data<<1)+(ch^'0'),ch=getchar();
  17. x=data*w;
  18. }
  19. template<typename T> inline void write(T x,char ch='\0')
  20. {
  21. if(x<0)putchar('-'),x=-x;
  22. if(x>9)write(x/10);
  23. putchar(x%10+'0');
  24. if(ch!='\0')putchar(ch);
  25. }
  26. template<typename T> inline void chkmin(T &x,T y){x=(y<x?y:x);}
  27. template<typename T> inline void chkmax(T &x,T y){x=(y>x?y:x);}
  28. template<typename T> inline T min(T x,T y){return x<y?x:y;}
  29. template<typename T> inline T max(T x,T y){return x>y?x:y;}
  30. inline void init()
  31. {
  32. memset(vis,1,sizeof(vis));
  33. vis[0]=vis[1]=0;
  34. mu[1]=1;
  35. for(register int i=2;i<MAXN;++i)
  36. {
  37. if(vis[i])
  38. {
  39. prime[++cnt]=i;
  40. mu[i]=-1;
  41. }
  42. for(register int j=1;j<=cnt&&i*prime[j]<MAXN;++j)
  43. {
  44. vis[i*prime[j]]=0;
  45. if(i%prime[j])mu[i*prime[j]]=-mu[i];
  46. else break;
  47. }
  48. }
  49. for(register int i=1;i<MAXN;++i)s[i]=(s[i-1]+mu[i])%Mod;
  50. }
  51. inline ll S(int x)
  52. {
  53. if(x<MAXN)return s[x];
  54. if(M.find(x)!=M.end())return M[x];
  55. ll res=0;
  56. for(register int i=2;;)
  57. {
  58. if(i>x)break;
  59. int j=x/(x/i);
  60. (res+=1ll*(j-i+1)*S(x/i)%Mod)%=Mod;
  61. i=j+1;
  62. }
  63. return M[x]=(1-res+Mod)%Mod;
  64. }
  65. inline ll f(int x)
  66. {
  67. ll res=0;
  68. for(register int i=1;;)
  69. {
  70. if(i>x)break;
  71. int j=x/(x/i);
  72. (res+=1ll*(j-i+1)*(x/i)%Mod)%=Mod;
  73. i=j+1;
  74. }
  75. return res;
  76. }
  77. int main()
  78. {
  79. read(n);init();
  80. ll res=0;
  81. for(register int i=1;;)
  82. {
  83. if(i>n)break;
  84. int j=n/(n/i);
  85. ll now=f(n/i);
  86. (res+=1ll*(S(j)-S(i-1)+Mod)%Mod*now%Mod*now%Mod)%=Mod;
  87. i=j+1;
  88. }
  89. write(res,'\n');
  90. return 0;
  91. }

【刷题】BZOJ 4176 Lucas的数论的更多相关文章

  1. bzoj 4176 Lucas的数论

    bzoj 4176 Lucas的数论 和约数个数和那题差不多.只不过那个题是多组询问,这题只询问一次,并且 \(n\) 开到了 \(10^9\). \[ \begin{align*} \sum_{i= ...

  2. Mobius反演与积性函数前缀和演学习笔记 BZOJ 4176 Lucas的数论 SDOI 2015 约数个数和

    下文中所有讨论都在数论函数范围内开展. 数论函数指的是定义域为正整数域, 且值域为复数域的函数. 数论意义下的和式处理技巧 因子 \[ \sum_{d | n} a_d = \sum_{d | n} ...

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

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

  4. bzoj 4176: Lucas的数论 -- 杜教筛,莫比乌斯反演

    4176: Lucas的数论 Time Limit: 30 Sec  Memory Limit: 256 MB Description 去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么 ...

  5. ●BZOJ 4176 Lucas的数论

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4176 题解: 莫比乌斯反演,杜教筛 首先有这么一个结论: 令d(n)表示n的约数的个数(就是 ...

  6. [bzoj 4176] Lucas的数论 (杜教筛 + 莫比乌斯反演)

    题面 设d(x)d(x)d(x)为xxx的约数个数,给定NNN,求 ∑i=1N∑j=1Nd(ij)\sum^{N}_{i=1}\sum^{N}_{j=1} d(ij)i=1∑N​j=1∑N​d(ij) ...

  7. BZOJ 4176 Lucas的数论 莫比乌斯反演+杜教筛

    题意概述:求,n<=10^9,其中d(n)表示n的约数个数. 分析: 首先想要快速计算上面的柿子就要先把d(ij)表示出来,有个神奇的结论: 证明:当且仅当a,b没有相同的质因数的时候我们统计其 ...

  8. bzoj 4176: Lucas的数论【莫比乌斯反演+杜教筛】

    首先由这样一个结论: \[ d(ij)=\sum_{p|i}\sum_{q|j}[gcd(p,q)==1] \] 然后推反演公式: \[ \sum_{i=1}^{n}\sum_{j=1}^{n}\su ...

  9. 【刷题】BZOJ 2407 探险

    Description 探险家小T好高兴!X国要举办一次溶洞探险比赛,获奖者将得到丰厚奖品哦!小T虽然对奖品不感兴趣,但是这个大振名声的机会当然不能错过! 比赛即将开始,工作人员说明了这次比赛的规则: ...

随机推荐

  1. jQueryMobile的按钮样式

    好吧,已经学了jQueryMobile一年了,今天心血来潮,想要写一篇关于jQueryMobile的博客文章,记得去年暑假在公司实习jQueryMobile,想一想真是怀念当时还是菜鸟的自己,年轻就是 ...

  2. springboot mybatis 后台框架平台 集成代码生成器 shiro 权限

    1.代码生成器: [正反双向](单表.主表.明细表.树形表,快速开发利器)freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本.处理类.service等完整模块2. ...

  3. Exp4 恶意代码分析 20155223

    Exp4 恶意代码分析 20155223 使用原生命令schtasks监视系统运行 在系统盘目录下建立脚本文件netstatlog.bat,包含以下命令: date /t >> c:\ne ...

  4. 20155308《网络对抗》Exp4 恶意代码分析

    20155308<网络对抗>Exp4 恶意代码分析 实践说明 实践目标 是监控你自己系统的运行状态,看有没有可疑的程序在运行. 是分析一个恶意软件,就分析Exp2或Exp3中生成后门软件: ...

  5. 一、InnoDB引擎

    一.InnoDB的历史 MYSQL的5.1版本的时候还是使用旧的innoDB,当时orale公司推出的新的innoDB引擎, 但是需要以插件的形式编译,叫innoDB plugin : 知道MYSQL ...

  6. system表空间不可改名

    SQL> startup mount;ORACLE instance started. Total System Global Area  814227456 bytesFixed Size   ...

  7. SQLAlchemy 与 fask-SQLAlchemy 中的多表查询例子

    我们知道,<学生.课程.选课>,是一个典型的多对多关系. 现分别用 SQLAlchemy 与 fask-SQLAlchemy 实现. 声明:本人实测通过. 使用 SQLAlchemy fr ...

  8. [CF1060E]Sergey and Subway[树dp]

    题意 给出 \(n\) 个点的树,求 \(\sum_{i=1}^n{\sum_{j=i}^n{\lceil \frac{dis(i,j)}{2} \rceil}}\) . \(n\leq 2 \tim ...

  9. 真机调试傻瓜图文教程(Xcode6.4)

    先准备好99刀,真机调试才带你玩. PS:万能宝十来块钱可以买个资格... Developer Apple上的设置 1.打开https://developer.apple.com/,点击Member ...

  10. Repository模式与UnitOfWorks模式的运用

    软件开发就像是一个江湖,而设计模式就是一本高深的秘籍每读一次.用一次.想一次都能得到新的领悟,让我们的设计技能有所提高.开始时我们可能会“为了模式而模式”,让代码变得乱78糟甚至难以让人理解,但随着设 ...