题意:求$\sum_{i=1}^{n}\sum_{j=1}^{n}d(ij)$

首先推一发式子:

$\sum_{i=1}^{n}\sum_{j=1}^{n}d(ij)$

有一个结论:$d(nm)=\sum_{i|n}\sum_{j|m}[gcd(i,j)\equiv 1]$

然后代入,得:

$\sum_{i=1}^{n}\sum_{j=1}^{n}\sum_{p|i}\sum_{q|j}[gcd(p,q)\equiv 1]$

然后优先枚举$p$,$q$,得到:

$\sum_{p=1}^{n}\sum_{q=1}^{n}[gcd(p,q)\equiv 1]\sum_{p|i}\sum_{q|j}1$

那么也就是:

$\sum_{p=1}^{n}\sum_{q=1}^{n}[gcd(p,q)\equiv 1]\frac{n}{p}\frac{n}{q}$

接下来就是常规步骤了

$\sum_{p=1}^{n}\sum_{q=1}^{n}\sum_{t|gcd(p,q)}\mu(t)\frac{n}{p}\frac{n}{p}$

也就是:

$\sum_{t=1}^{n}\mu(t)\sum_{p=1}^{\frac{n}{t}}\frac{n}{pt}\sum_{q=1}^{\frac{n}{t}}\frac{n}{qt}$

设$f(n)=\sum_{i=1}^{n}\frac{n}{i}$,那么后面就可以变成$\sum_{t=1}^{n}\mu(t)f(\frac{n}{t})^{2}$

求$f$可以数论分块,用杜教筛筛出$\mu$的前缀和之后再套个数论分块即可

代码:

#include <cstdio>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#define ll long long
using namespace std;
const ll mode=1000000007;
map <ll,ll> S;
int mu[10000005];
ll s[10000005];
int pri[10000005];
int cnt=0;
bool used[10000005];
void init()
{
mu[1]=s[1]=1;
for(int i=2;i<=10000000;i++)
{
if(!used[i])pri[++cnt]=i,mu[i]=-1;
for(int j=1;j<=cnt&&i*pri[j]<=10000000;j++)
{
used[i*pri[j]]=1;
if(i%pri[j]==0){mu[i*pri[j]]=0;break;}
mu[i*pri[j]]=-mu[i];
}
s[i]=(s[i-1]+mu[i]+mode)%mode;
}
}
ll get_S(ll x)
{
if(x<=10000000)return s[x];
else if(S.find(x)!=S.end())return S[x];
ll ret=0;
int las=0;
for(int i=2;i<=x;i=las+1)
{
las=x/(x/i);
ll temp=get_S(x/i);
ret=(ret+temp*(las-i+1)+mode)%mode;
}
ret=(1+mode-ret)%mode;
return S[x]=ret;
}
ll get_sum(ll x)
{
ll las=0,ret=0;
for(int i=1;i<=x;i=las+1)
{
las=x/(x/i);
ret+=(las-i+1)*(x/i)%mode;
ret%=mode;
}
return ret*ret%mode;
}
ll solve(ll n)
{
ll las=0,ret=0;
for(int i=1;i<=n;i=las+1)
{
las=n/(n/i);
ret+=(get_S(las)-get_S(i-1)+mode)%mode*get_sum(n/i)%mode;
ret%=mode;
}
return ret;
}
int main()
{
init();
ll n;
scanf("%lld",&n);
printf("%lld\n",solve(n));
return 0;
}

bzoj 4176的更多相关文章

  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的数论

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

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

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

  5. 【刷题】BZOJ 4176 Lucas的数论

    Description 去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么喜欢了. 在整理以前的试题时,发现了这样一道题目"求Sigma(f(i)),其中1<=i< ...

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

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

  7. [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) ...

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

    Description 去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么喜欢了. 在整理以前的试题时,发现了这样一道题目“求Sigma(f(i)),其中1<=i<=N”,其 ...

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

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

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

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

随机推荐

  1. docker compose服务编排简介、基于发布包构建多个webapi容器 和 基于镜像实现Nginx反向代理webapi

    一. docker compose服务编排简介 1. 背景 微服务架构的应用系统中一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,维护的工作量会很大: A. 要创建镜 ...

  2. Android版本历史

    版本 Code Name 代号 API 日期 NDK 1.0 Astro 铁臂阿童木  1     1.1 Bender, Petit Four 发条机器人 2     1.5 Cupcake  纸杯 ...

  3. 三、核心实战-服务Service-Ingress

    Service 将一组Pods公开为网络服务的抽象方法. 暴露deployment只能在集群内访问是ClusterIP,可以集群外访问是NodePort,默认端口分配是30000-32767之间 ku ...

  4. dart+flutter中使用PaginatedDataTable分页时最后一页多出空白行问题

    使用PaginatedDataTable时解决最后一页不够当前行的话会有很空白行的问题 解决的场景: 比如下图,28行数据,每页5行最后一页会多出两行空白. 解决方法: 可以使用PaginatedDa ...

  5. 国产低功耗Soc蓝牙语音遥控器芯片HS6621 指纹锁、体脂称等应用方案

    随着物联网技术不断发展,家用电器往智能化方向持续迭代,使用红外遥控器这种传统的互动方式已经满足不了实际的使用需求,蓝牙语音遥控器作为人机交互新载体,逐渐取代传统红外遥控器成为家居设备的标配.相比于传统 ...

  6. go 使用mysql

    package main /* 下划线(如:import _ hello/imp)的作用:当导入一个包时,该包下的文件里所有init()函数都会被执行, 然而,有些时候我们并不需要把整个包都导入进来, ...

  7. ctp认证权限

    现象: /sys/firmware/dmi/tables/smbios_entry_point: Permission denied/dev/mem: Permission denied/sys/fi ...

  8. server配置,IDE,快捷键索引目录

    查看内存占用  ps -aux --sort -rss 查看是否运行某个进程,ps -aux | grep xxxxx 查看端口占用 netstat -tunlp | grep 6379 docker ...

  9. linux源码-概览

    BootloaderWin    Bios Linux UbootAndroid fastboot linux源码宏观结构boot:启动linux时要用到的引导代码 bootsect.s 磁盘引导文件 ...

  10. element-ui中el-table设置多选checkbox时,selection-change重复执行,以及选不中问题

    项目中使用了elementUI中el-table的选择框.在另外一个地方展示选中的行的数量.设置显示数量之后,选择框就无法选中,change事件执行两次. 解决办法:给el-table设置row-ke ...