【BZOJ4176】Lucas的数论

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。

题解:前置技能:

然后直接上莫比乌斯反演

用杜教筛处理μ(d),然后喜闻乐见的分块~

#include <cstdio>
#include <cstring>
#include <iostream>
#include <map>
#define mod 1000000007
using namespace std;
const int m=10000000;
typedef long long ll;
int n,num;
ll ans;
int mu[m+10],sm[m+10],pri[m+10];
bool np[m+10];
map<ll,ll> mp;
ll getsm(ll x)
{
if(x<=m) return sm[x];
if(mp[x]) return mp[x];
ll ret=1,i,last;
for(i=2;i<=x;i=last+1)
{
last=x/(x/i);
ret=(ret-(last-i+1)*getsm(x/i)%mod+mod)%mod;
}
mp[x]=ret;
return ret;
}
ll getf(ll x)
{
ll ret=0,i,last;
for(i=1;i<=x;i=last+1)
{
last=x/(x/i);
ret=(ret-(last-i+1)*(x/i)%mod+mod)%mod;
}
return ret*ret%mod;
}
int main()
{
scanf("%d",&n);
ll i,j,last;
sm[1]=mu[1]=1;
for(i=2;i<=m;i++)
{
if(!np[i]) pri[++num]=i,mu[i]=-1;
sm[i]=sm[i-1]+mu[i];
for(j=1;j<=num&&i*pri[j]<=m;j++)
{
np[i*pri[j]]=1;
if(i%pri[j]==0)
{
mu[i*pri[j]]=0;
break;
}
mu[i*pri[j]]=-mu[i];
}
}
for(i=1;i<=n;i=last+1)
{
last=n/(n/i);
ans=(ans+(getsm(last)-getsm(i-1)+mod)%mod*getf(n/i)%mod)%mod;
}
printf("%lld",ans);
return 0;
}

最新文章

  1. ES6特性
  2. [转]C#压缩打包文件
  3. Dex动态加载
  4. PostgreSQL Replication之第九章 与pgpool一起工作(7)
  5. Http协议[Get和Post]详解
  6. Mongo服务器集群配置【转】
  7. Entity Framework中实现查询的几种方法
  8. mac 更改word的默认显示比例为125
  9. Android项目--XML解析
  10. 共享AFHTTPSessionManager 单例好处浅析
  11. Twitter数据非API采集方法
  12. javascript原始值和对象引用
  13. ASP.NET Core在Azure Kubernetes Service中的部署和管理
  14. paloalto防火墙执行初始配置
  15. shell几种字符串加密解密的方法
  16. zabbix监控windows服务器
  17. Scala之List,Set及Map基本操作
  18. java读取ACCESS数据库的简单示例
  19. ECLIPSE使用HG插件去上载 GOOGLE.CODE下的代码
  20. Spring 加载Controller逻辑的源码笔记

热门文章

  1. HTML5 Canvas 笛卡尔坐标系转换尝试
  2. lodash round
  3. php RSA 加密 与java加密互交,java解密
  4. ohasd failed to start: Inappropriate ioctl for device
  5. openstack架构简单介绍J版(更新中)
  6. 《我是一只IT小小鸟》(胡江堂主编)读后感
  7. springboot学习(八) 使用jpa访问数据库
  8. python基础-初识Python和不同语言之间的区别
  9. ArrayList和Vector性能对比
  10. active mq 配置