[CCPC2019 ONLINE]E huntian oy
题意
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的更多相关文章
- 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互质. ...
- HDU6706 huntian oy(2019年CCPC网络赛+杜教筛)
目录 题目链接 思路 代码 题目链接 传送门 思路 看到这题还比较懵逼,然后机房大佬板子里面刚好有这个公式\(gcd(a^n-b^n,a^m-b^m)=a^{gcd(n,m)}-b^{gcd(n,m) ...
- 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\),且 ...
- 2019中国大学生程序设计竞赛(CCPC) - 网络选拔赛
传送门 A.^&^ 题意: 找到最小的正数\(C\),满足\((A\ xor\ C)\&(B\ xor \ C)\)最小. 思路: 输出\(A\&B\)即可,特判答案为0的情况 ...
- 2019CCPC网络预选赛 八道签到题题解
目录 2019中国大学生程序设计竞赛(CCPC) - 网络选拔赛 6702 & 6703 array 6704 K-th occurrence 6705 path 6706 huntian o ...
- 2019CCPC网络赛
^&^ (HDU 6702) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Other ...
- 2019-ACM-CCPC-Online-Contest
2019-ACM-CCPC-Online-Contest 1.^&^ 题意: 求一个最小的正整数\(C\),使得\((A\oplus C) \&(B\oplus C)\)最小. 思 ...
- 2019中国大学生程序设计竞赛(CCPC) - 网络选拔赛(8/11)
$$2019中国大学生程序设计竞赛(CCPC)\ -\ 网络选拔赛$$ \(A.\hat{} \& \hat{}\) 签到,只把AB都有的位给异或掉 //#pragma comment(lin ...
- [CCPC2019 哈尔滨] L. LRU Algorithm - 哈希
[CCPC2019 哈尔滨] L. LRU Algorithm Description 对一个序列执行 LRU 算法.每次询问给定一个窗口,问它是否出现过. Solution 很显然我们可以先假设窗口 ...
随机推荐
- ORACLE 两表关联更新三种方式
不多说了,我们来做实验吧. 创建如下表数据 select * from t1 ; select * from t2; 现需求:参照T2表,修改T1表,修改条件为两表的fname列内容一致. 方式1,u ...
- 一个APP从启动到主页面显示经历了哪些过程?
①点击桌面App图标,Launcher进程采用Binder IPC向system_server进程发起startActivity请求: ②system_server进程接收到请求后,向zygote进程 ...
- Oracle Net Manager 的使用方法(监听的配置方法)
一,在服务端配置oracle端口 win+R 输入netca 弹出如下窗口后 选择监听程序配置,点击下一步 二.配置端口后使用Telnet工具调试端口是否联通 在命令行输入telnet 服务器ip ...
- Django学习小记1-安装配置
Django是一个开放源代码的Web应用框架,由Python写成. python 中的web框架有许多例如:Django.Tornado.Flask..而Django相较与其他WEB框架其优势为:大而 ...
- 超详细!如何利用Huginn制作专属RSS
前言 本文首发于个人网站,欢迎订阅.本篇博文接上利用Feed43为网站自制RSS源,上一篇讲解了RSS的简介以及利用Feed43自制专属RSS,Feed43有其优势,缺陷也很明显,不能高度自定义.有的 ...
- ssh免密登陆和加密解密
一 丶实现无密码的远程管理 1.生成公钥 私钥 [root@room9pc14 桌面]# ssh-keygen [root@room9pc14 桌面]# ls /root/.ssh/ 2.上传公钥到虚 ...
- JVM之GC(一)
Java较C而言,最大的区别在于内存管理.JVM设有无用内存空间自动回收复用机制,也就是我们所说的GC. 之前说过,栈是为线程.为函数的执行分配内存的地方,用完即“销毁”,这里留待以后做深入探讨:堆是 ...
- c++ beep 演奏一次质量不高的天空之城
beep函数用法: beep(HZ,time); hz是发出多少赫兹声音,time是发声时间(ms) 话不多说,上代码 #include <cstdio> #include <win ...
- 【转】ArcGIS Server 站点架构-Web Adaptor
GIS 服务器内置了Web服务器,如果我想用我自己企业内部的服务器,该怎么做? 多个GIS服务器集群又如何做? …… 有问题,说明我们在思考,这也是我们希望看到的,因为只有不断的思考,不断的问自己为什 ...
- Linux 7.5 SSH服务和SFTP服务分离
SFTP是SSH的一部分,SFTP没有单独的守护进程,它必须使用SSHD守护进程(端口号默认是22)来完成相应的连接操作,所以从某种意义上来说,SFTP并不像是一个服务器程序,而更像是一个客户端程序. ...