题意

求 $f(n,a,b)=\sum_{i=1}^n \sum_{j=1}^i gcd(i^a-j^a,i^b-j^b)[gcd(i,j)=1]\%(10^9+7)$,$1 \le n,a,b \le 10^9$,共有 $T$ 组测试,其中只有10组的 $n$ 大于 $10^6$.

分析

首先,当 $i, j$互质,$a, b$互质时,有 $gcd(i^a-j^a,i^b-j^b)=i-j$(证明见 链接),也可以打表猜一猜嘛。

可以推出:$$\sum_{d=1}^{N}\mu(d)\cdot d\sum_{i=1}^{\lfloor\frac{N}{d}\rfloor}\sum_{j=1}^{i}(i-j)$$

单独考虑后半部分,$\sum_{i=1}^{k}\sum_{j=1}^{i}(i-j)=\frac{k^3-k}{6}$.

然后,只剩下左边的 $\mu(d)\cdot d$,

将其与恒等函数 $Id(n) = n$ 狄利克雷卷积后得

$$\begin{align*}
(\mu(d)\cdot d)*Id(d)
& =  \sum_{d|n}(\mu(d)\cdot d)\cdot Id(\frac{n}{d})\\
& = \sum_{d|n}\mu(d) =  [n=1]
\end{align*}$$

接下来套杜教筛得公式

$$\begin{align*}
S(n)
& = \sum\limits_{i=1}^n [i=1]-\sum\limits_{i=2}^ni\cdot S(\lfloor\dfrac{n}{i}\rfloor)\\
& = 1-\sum\limits_{i=2}^ni\cdot S(\lfloor\dfrac{n}{i}\rfloor)
\end{align*}$$

#include<bits/stdc++.h>
using namespace std; typedef long long ll;
const int maxn = 6e6 + ;
const ll mod = 1e9+;
const ll inv6 = ;
int sum[maxn], mu[maxn], pri[maxn], pn;
bool vis[maxn];
map<int, int>mp_sum;
int n, a, b; ll s2(ll i, ll j)
{
return (i+j) * (j-i+) / % mod;
} ll s3(ll k)
{
return (k*k%mod - ) * k % mod * inv6 % mod;
} ll S(ll x)
{
if(x < maxn) return sum[x];
if(mp_sum[x]) return mp_sum[x];
ll ret = 1LL;
for(int i = , j;i <= x;i = j+)
{
j = x / (x / i);
ret = (ret - s2(i, j) * (S(x/i))%mod) % mod;
}
return mp_sum[x] = (ret + mod) % mod;
} void pre()
{
mu[] = ;
for(int i = ;i < maxn;i++)
{
if(!vis[i])
{
pri[++pn] = i;
mu[i] = -;
}
for(int j = ;j <= pn && i * pri[j] < maxn; j++)
{
vis[i * pri[j]] = true;
if(i % pri[j]) mu[i * pri[j]] = -mu[i];
else
{
mu[i * pri[j]] = ;
break;
}
}
}
for(int i = ;i < maxn;i++) sum[i] = (sum[i-] + i * mu[i]) % mod;
} int main()
{
pre(); int T;
scanf("%d", &T);
while(T--)
{
scanf("%d%d%d", &n, &a, &b);
ll ans = ;
for(ll l = ,r; l <= n;l = r+)
{
r = n / (n / l);
ans = (ans + (S(r) - S(l-)) * s3(n/l)) % mod;
}
printf("%lld\n", (ans+mod)%mod);
}
return ;
}

最开始开的 MAXN=2e6,会TLE;原博客开的6e6,又MLE,将long long 数组改成 int 才行。

其实标答是推成 $\displaystyle ans = \frac{\sum _{i=1}^n i\varphi (i) - 1}{2}$,少了一次整除分块。

但是,通过这种解法,让我深刻认识了杜教筛的时空矛盾该怎么平衡。

参考链接:https://segmentfault.com/a/119000002017183

2019CCPC网络赛 HD6707——杜教筛的更多相关文章

  1. ACM-ICPC 2018 徐州赛区网络预赛 D 杜教筛 前缀和

    链接 https://nanti.jisuanke.com/t/31456 参考题解  https://blog.csdn.net/ftx456789/article/details/82590044 ...

  2. 2019年南京网络赛E题K Sum(莫比乌斯反演+杜教筛+欧拉降幂)

    目录 题目链接 思路 代码 题目链接 传送门 思路 首先我们将原式化简: \[ \begin{aligned} &\sum\limits_{l_1=1}^{n}\sum\limits_{l_2 ...

  3. HDU6706 huntian oy(2019年CCPC网络赛+杜教筛)

    目录 题目链接 思路 代码 题目链接 传送门 思路 看到这题还比较懵逼,然后机房大佬板子里面刚好有这个公式\(gcd(a^n-b^n,a^m-b^m)=a^{gcd(n,m)}-b^{gcd(n,m) ...

  4. CCPC 2019 网络赛 HDU huntian oy (杜教筛)

    1005 huntian oy (HDU 6706) 题意: 令,有T次询问,求 f(n, a, b). 其中 T = 10^4,1 <= n,a,b <= 1e9,保证每次 a,b互质. ...

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

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

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

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

  7. 杜教筛 && bzoj3944 Sum

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

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

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

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

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

随机推荐

  1. STS,修改Ctrl+Shift+R匹配类的配置

    在使用STS(Spring Tools)时,每次通过Ctrl+Shift+R查询类时,会出来一堆不想看到的类.如下所示: 上面的.class文件和父项目中的.java文件,在匹配类时,是不想看到的. ...

  2. 一起来学Spring Cloud | 第八章:消息总线(Spring Cloud Bus)

    上一章节,我们讲解了分布式配置中心spring cloud config,我们把配置项存放在git或者本地,当我们修改配置时,需要重新启动服务才能生效.但是在生产上,一个服务部署了多台机器,重新启动比 ...

  3. Python-11-生成器

    一.定义 可以理解为一种数据类型,这种数据类型自动实现了迭代器协议(其他数据类型需要调用__iter__方法),所以生成器就是一种迭代器. 二.生成器的两种形式 1. 生成器函数 使用yield代替r ...

  4. InfoGan笔记

    InfoGAN: Interpretable Representation Learning by Information Maximizing Generative Adversarial Nets ...

  5. ArcGIS Server SOE地图服务重启特别卡

    ArcGIS Server 服务器端扩展,SOE代码调试时,需要经常重新编译.替换地图服务中的扩展, 由于未知问题,本地开发环境包含SOE的地图服务,每次重启都需要耗费相当长的时间,大体上20多分钟, ...

  6. Java线程读写锁

    排他锁和共享锁: 读写锁:既是排他锁,又是共享锁.读锁,共享锁,写锁:排他锁 读和读是不互斥的 import java.util.HashMap; import java.util.Map; impo ...

  7. C#使用共享内存与C++进行数据交互

    现在做桌面的不多了.前端太流行了,大家都去搞前端了. 需求如下: 上层UI使用C#开发,数据采集模块使用C++开发.数据采集模块采集到的数据比较大,上层需要接收这一块数据并显示 进程间通信的方式有多种 ...

  8. IOC+EF+Core项目搭建EF封装(一)

    添加应用Microsoft.EntityFrameworkCore:Microsoft.EntityFrameworkCore.Design:Microsoft.EntityFrameworkCore ...

  9. 主机与虚拟机ping不通问题

    在win10 上利用vm安装linux虚拟机,物理机与虚拟机之间不能ping通,除了检查物理机与虚拟机防火墙状态外,还要注意物理机设置的ip与虚拟机设置的ip,要在同一个ip段

  10. GitHub预览网页[2019最新]

    GitHub预览网页 1. 创建仓库 2. 设置页面预览 3. 上传html 4. 访问网页 1. 创建仓库 登陆GitHub创建仓库 datamoko 添加基本信息: 仓库名.仓库描述,然后点击创建 ...