题意

http://acm.hdu.edu.cn/showproblem.php?pid=6706


思考

打表出奇迹。

注意到这个式子有一大堆强条件限制,最后化为:

$$\frac{1}{2}\sum_{i=1}^{n}\sum_{j=1}^{n}{|i-j|*[(i,j)==1]}$$

考虑莫比乌斯反演:

$$\sum_{i=1}^{n}\sum_{j=1}^{n}{|i-j|}$$

$$=\sum_{i=1}^{n}\sum_{j=1}^{n}{|i-j|}\sum_{d|i,d|j}{\mu(d)}$$
$$=\sum_{d=1}^{n}{\mu(d)*d*\sum_{i=1}^{\frac{n}{d}}\sum_{j-1}^{\frac{n}{d}}1}$$
$$=\sum_{d=1}^{n}{\mu(d)*d*F(\frac{n}{d})}$$

F是容易计算的。也就是说,我们要算出$\sum_{d=1}^{n}{\mu(d)*d}$在根号个点处的前缀和。杜教筛即可。

对于小于等于$10^6$的情况,线性筛预处理。


代码

 #pragma GCC optimize 2
#include<bits/stdc++.h>
#define mod 1000000007
#define G2 500000004
#define G3 333333336
#define G6 166666668
using namespace std;
typedef long long int ll;
const int maxn=1E6+;
ll T,n,m;
ll size,prime[maxn],mu[maxn],sum[maxn];
ll F[maxn],f[maxn];
int TOT;
int used[maxn];
bool vis[maxn];
ll sqr,what[maxn];
inline int where(int x)
{
return x<=sqr?x:n/x+sqr;
}
int gcd(int x,int y)
{
if(y==)
return x;
return x%y==?y:gcd(y,x%y);
}
inline ll qpow(ll x,ll y)
{
ll ans=,base=x;
while(y)
{
if(y&)
ans=ans*base%mod;
base=base*base%mod;
y>>=;
}
return ans;
}
inline ll G(ll m)
{
return (m*m%mod*(m-)%mod-m*(m-)%mod*(*m-)%mod*G3%mod+mod)%mod;
}
void init()
{
mu[]=;
f[]=;
F[]=;
for(int i=;i<=;++i)
{
if(!vis[i])
prime[++size]=i,mu[i]=-,f[i]=i-;
for(int j=;j<=size&&prime[j]*i<=;++j)
{
vis[prime[j]*i]=;
mu[prime[j]*i]=-mu[i];
f[prime[j]*i]=f[i]*f[prime[j]]%mod;
if(i%prime[j]==)
{
mu[prime[j]*i]=;
f[prime[j]*i]=f[i]*prime[j]%mod;
break;
}
}
F[i]=(F[i-]+f[i]*(ll)i%mod)%mod;
}
for(int i=;i<=;++i)
sum[i]=sum[i-]+mu[i]*(ll)i;
}
void small()
{
cout<<(F[n]-+mod)*G2%mod<<endl;
}
ll calc(ll n)
{
if(used[where(n)]==TOT)
return what[where(n)];
if(n<=)
return what[where(n)]=sum[n];
ll g=;
for(ll l=,r;l<=n;l=r+)
{
r=n/(n/l);
g=(g-(r-l+)*(r+l)%mod*G2%mod*calc(n/l)%mod+mod)%mod;
}
used[where(n)]=TOT;
return what[where(n)]=g;
}
inline ll getsum(int x)
{
if(x<=)
return sum[x];
return what[where(x)];
}
void big()
{
++TOT;
sqr=sqrt(n+0.5);
ll GG=calc(n);
ll ans=;
for(int l=,r;l<=n;l=r+)
{
r=n/(n/l);
ans=(ans+(getsum(r)-getsum(l-)+mod)*G(n/l)%mod)%mod;
}
cout<<ans*G2%mod<<endl;
}
void solve()
{
ll a,b;
cin>>n>>a>>b;
if(n<=)
small();
else
big();
}
int main()
{
ios::sync_with_stdio(false);
init();
cin>>T;
while(T--)
solve();
return ;
}

[CCPC2019 ONLINE]E huntian oy的更多相关文章

  1. 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互质. ...

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

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

  3. HDU 6706 huntian oy(杜教筛 + 一些定理)题解

    题意: 已知\(f(n,a,b)=\sum_{i=1}^n\sum_{j=1}^igcd(i^a-j^a,i^b-j^b)[gcd(i,j)=1]\mod 1e9+7\),\(n\leq1e9\),且 ...

  4. 2019中国大学生程序设计竞赛(CCPC) - 网络选拔赛

    传送门 A.^&^ 题意: 找到最小的正数\(C\),满足\((A\ xor\ C)\&(B\ xor \ C)\)最小. 思路: 输出\(A\&B\)即可,特判答案为0的情况 ...

  5. 2019CCPC网络预选赛 八道签到题题解

    目录 2019中国大学生程序设计竞赛(CCPC) - 网络选拔赛 6702 & 6703 array 6704 K-th occurrence 6705 path 6706 huntian o ...

  6. 2019CCPC网络赛

    ^&^ (HDU 6702) Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Other ...

  7. 2019-ACM-CCPC-Online-Contest

    2019-ACM-CCPC-Online-Contest 1.^&^ 题意: ​ 求一个最小的正整数\(C\),使得\((A\oplus C) \&(B\oplus C)\)最小. 思 ...

  8. 2019中国大学生程序设计竞赛(CCPC) - 网络选拔赛(8/11)

    $$2019中国大学生程序设计竞赛(CCPC)\ -\ 网络选拔赛$$ \(A.\hat{} \& \hat{}\) 签到,只把AB都有的位给异或掉 //#pragma comment(lin ...

  9. [CCPC2019 哈尔滨] L. LRU Algorithm - 哈希

    [CCPC2019 哈尔滨] L. LRU Algorithm Description 对一个序列执行 LRU 算法.每次询问给定一个窗口,问它是否出现过. Solution 很显然我们可以先假设窗口 ...

随机推荐

  1. git之分支

    分支相互之间互不干扰 1.小乌龟创建分支,切换/检出   创建后直接切换到该分支,另一个需要再切换一下. 2.点击这个可以看到所有的分支,进行删除操作. 3.在fen1,fen2分别进行操作更新,互不 ...

  2. 将 Sidecar 容器带入新的阶段

    作者 | 徐迪.张晓宇 导读:本文根据徐迪和张晓宇在 KubeCon NA 2019 大会分享整理.分享将会从以下几个方面进行切入:首先会简单介绍一下什么是 Sidecar 容器:其次,会分享几个阿里 ...

  3. Rust入坑指南:亡羊补牢

    如果你已经开始学习Rust,相信你已经体会过Rust编译器的强大.它可以帮助你避免程序中的大部分错误,但是编译器也不是万能的,如果程序写的不恰当,还是会发生错误,让程序崩溃.所以今天我们就来聊一聊Ru ...

  4. Eclipse+Tomcat+MAVEN开发环境配置

    https://blog.csdn.net/zhshulin/article/details/30779873 补充: 1.eclipse配置tomcat window——preferences——s ...

  5. 【题解】CF894E Ralph and Mushrooms (缩点)

    [题解]CF894E Ralph and Mushrooms (缩点) 这是紫?给个解方程算法 考虑一条边若可以重复遍历说明一定有环,有环的话一定会把环上的蘑菇榨干,考虑一条边从全部到榨干的贡献是多少 ...

  6. 洛谷$P4099\ [HEOI2013]\ SAO\ dp$

    正解:树形$dp$ 解题报告: 传送门$QwQ$. 考虑设$f_i$表示点$i$的子树内的拓扑序排列方案数有多少个. 发现这样不好合并儿子节点和父亲节点.于是加一维,设$f_{i,j}$表示点$i$的 ...

  7. $NIM$游戏小总结

    $umm$可能之后会写个博弈论总结然后就直接把这个复制粘贴上去就把这个删了 但因为还没学完所以先随便写个$NIM$游戏总结趴$QAQ$ 首先最基础的$NIM$游戏:有$n$堆石子,每次可以从一堆中取若 ...

  8. Wireshark抓包,带你快速入门

    前言 关于抓包我们平时使用的最多的可能就是Chrome浏览器自带的Network面板了(浏览器上F12就会弹出来).另外还有一大部分人使用Fiddler,Fiddler也是一款非常优秀的抓包工具.但是 ...

  9. Linux上查找最大文件的 3 种方法

    有时候我们在系统上安装了数十个应用程序,随着使用时间的推移,许多文件变得越来越大,从而导致磁盘空间越来越小.那么问题来了,如何找到系统上这些大文件,然后进行一番磁盘空间清理呢,这篇文章就此介绍几种查找 ...

  10. a标签属性href值为#和javasrcript:void(0)的区别

    当我们需要一个空链接时,通常有两种方法: <a href="#">这个一个空链接</a> <a href="javascript:void( ...