[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 'alter table '|| t.table_name||' disable constraint '||t.constraint_name||';' from user_ ...
- linux包之dracut
这是一个工具类,不是一个后台服务类 centos7.2-minimal就下面三个包 [root@1st-kvm ~]# rpm -qa|grep dracutdracut-config-rescue- ...
- HBase 分裂(split)
1. 为什么split 最初一个Table 只有一个region(因此只能存放在一个region server上).随着数据的不断写入,HRegion越来越大,当到达一定程度后分裂为两个,通过负载均衡 ...
- js/jq判断鼠标滚轮方向
js判断鼠标滚轮方向: var scrollFunc = function (e) { e = e || window.event; if (e.wheelDelta) { //判断浏览器IE,谷歌滑 ...
- mysql中information_schema.triggers字段说明
1. 获取所有触发器信息(TRIGGERS) SELECT * FROM information_schema.TRIGGERS WHERE TRIGGER_SCHEMA='数据库名'; TR ...
- 【一起学源码-微服务】Nexflix Eureka 源码十一:EurekaServer自我保护机制竟然有这么多Bug?
前言 前情回顾 上一讲主要讲了服务下线,已经注册中心自动感知宕机的服务. 其实上一讲已经包含了很多EurekaServer自我保护的代码,其中还发现了1.7.x(1.9.x)包含的一些bug,但这些问 ...
- 从0开发3D引擎(一):开篇
介绍 大家好,本系列带你踏上Web 3D编程之旅- 本系列是实战类型,从0开始带领读者写出"良好架构.良好扩展性.最小功能集合(MVP)" 的3D引擎. 本系列的素材来自我们的产品 ...
- Linux下自动化部署ASP.NET CORE 3.1(Docker+Jenkins+Nginx)
1.先配置好Docker阿里云加速,可以使用阿里云容器服务 (可自己在阿里云申请,要不然安装东西直接很慢)注意:https://XXXX.mirror.aliyuncs.com为阿里云加速服务分配地址 ...
- Java中日期格式化YYYY-DD的坑
写这篇博文是记录下跨年的bug.去年隔壁组的小伙伴就是计算两个日期之间间隔的天数,因为跨年的原因计算有误. 当时测试组的小姐姐也没有模拟出来这种场景,导致上生产环境直接影响线上的数据. 今天逛技术论论 ...
- 用本地自定义域名访问远程服务器,并支持websocket和cookie
场景 在公司会有很多测试的机器,或者一些OA服务,Confluence,Jenkins,各种中间件的后台等等,都使用HTTP访问,且由于是内网机器没有域名,输入IP又要输入不同端口,访问起来比较麻烦. ...