题意

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. 学习Java第八周

    1.流的分类 1.字节流:Stream 2.字符流: Writer,Reader 输入流 :InputStream ,Reader 输出流 :OuputStream,Writer 字节流重要还是字符流 ...

  2. 安卓中运行报错Error:Execution failed for task ':app:transformClassesWithDexForDebug'解决

    在androidstuio中运行我的未完项目,报错: Error:Execution failed for task ':app:transformClassesWithDexForDebug'.&g ...

  3. markdown设置编辑基本语法

    看到其他人写的东西,版面设计,文字样式,区域划分都是那么好看,我一直不知道是怎么设计的,今天发现了,做以记录. #一.设置Markdown编辑模式 二.Markdown编辑语法 一.标题 在想要设置为 ...

  4. 使用Miniconda安装Scrapy遇到的坑

    最近在看小甲鱼的书,学习学习爬虫,其中有一块是通过Miniconda3安装Scrapy,结果却遇到了下面的错误:fatal error in launcher:unable to create pro ...

  5. 算法复杂度之 空间复杂度(Java)

    0.说明 根据算法书上的定义,一个算法的空间复杂度包括算法程序所占用的空间,输入初始数据所占用的空间以及算法执行过程中所需要的额外空间.本文各种结论全部参考过标准文献,本人也进行过验证.验证过程本文不 ...

  6. 通过9个Linux-0.11实验学习操作系统

    简介 2019年秋,我自学了一下哈工大的操作系统课程,感觉其设计的教程和实验作为操作系统入门是个不错的选择(虽然是基于较老的Linux-0.11写的).实验大致覆盖了操作系统中的核心概念,例如启动.中 ...

  7. 深入CAS的底层实现机制,以及对应的使用风险

    概述 CAS(Compare-and-Swap),即比较并替换,是一种实现并发算法时常用到的技术,Java并发包中的很多类都使用了CAS技术.CAS也是现在面试经常问的问题,本文将深入的介绍CAS的原 ...

  8. 配置一个yum私有仓库

    使用一台服务器配置私有仓库做yum源,本身使用file,客户端使用http连接 安装http服务: [root@ceph1 ~]# yum -y install httpd 修改配置文件 Docume ...

  9. Python学习3月5号【python编程 从入门到实践】---》笔记(3)

    第五章 1.if 语句 一.(条件测试)::每条if语句的核心都是一个值为true或false的表达式,这种表达式被称为条件测试.Python根据条件测试的值为True或者False来决定是否执行if ...

  10. SpringBootTest 测试工具

    以下内容,翻译自官方文档,并结合了学习过程的demo. Spring Boot提供了许多实用程序和注解,帮助测试应用程序.测试支持由两个模块提供:spring-boot-test 包含核心项,spri ...