2019-ACM-ICPC-南京区网络赛-E. K Sum-杜教筛+欧拉定理


【Problem Description】

令\(f_n(k)=\sum_{l_1=1}^n\sum_{l_2=1}^n\dots\sum_{l_k=1}^n gcd(l_1,l_2,\dots,l_k)\)。求\(\sum_{i=2}^kf_n(i)\ mod \ (10^9+7)\)。

【Solution】

对于\(f_n(k)\)有:

\[\sum_{l_1=1}^n\sum_{l_2=1}^n\dots\sum_{l_k=1}^ngcd(l_1,l_2,\dots,l_k)=\sum_{d=1}^n\sum_{l_1=1}^{\frac{n}{d}}\sum_{l_2=1}^{\frac{n}{d}}\dots\sum_{l_k=1}^{\frac{n}{d}}[gcd(l_1,l_2,\dots,l_k)=1]\cdot d^2
\\=\sum_{d=1}^nd^2\sum_{t=1}^{n}\mu(t)\sum_{l_1=1}^{\frac{n}{dt}}\sum_{l_2=1}^{\frac{n}{dt}}\dots\sum_{l_k=1}^{\frac{n}{dt}}=\sum_{d=1}^nd^2\sum_{t=1}^n\mu(t)\lfloor\frac{n}{dt}\rfloor^k
\]

令\(T=dt\)得:

\[f_n(k)=\sum_{T=1}^{n}\sum_{t|T}\mu(t)\cdot\frac{T^2}{t^2}\cdot \lfloor\frac{n}{T}\rfloor^k
\]

则\(\sum_{i=2}^kf_n(i)\)为:

\[\sum_{i=2}^kf_n(i)=\sum_{i=2}^k\sum_{T=1}^n\sum_{t|T}\mu(t)\cdot \frac{T^2}{t^2}\cdot \lfloor\frac{n}{T}\rfloor^k=\sum_{T=1}^n\sum_{t|T}\mu(t)\frac{T^2}{t^2}\sum_{i=2}^k\lfloor\frac{n}{T}\rfloor^k
\\=\sum_{T=1}^n\sum_{t|T}\mu(t)\frac{T^2}{t^2}\Big(\frac{\lfloor\frac{n}{T}\rfloor^{k+1}-1}{\lfloor\frac{n}{T}\rfloor-1}-\lfloor\frac{n}{T}\rfloor-1\Big)
\]

因为\(k\le 10^{10^5}\),所以用欧拉定理降幂取模即可。注意特判\(\lfloor \frac{n}{T}\rfloor=1\)的情况。

其中令\(g(T)=\sum_{t|T}\mu(t)\cdot \frac{T^2}{t^2},\Phi(n)=\sum_{T=1}^ng(T)\)。对于\(T\)小的部分可以通过线性筛求得:

  1. 当\(T\)为素数时,\(g(T)=T^2-1\)。
  2. 若\(T\)中无平方质因子时\(T=p_1\cdot p_2\dots p_k\),因为\(g(T)\)为积形函数,则有\(g(T)=g(p_1)\cdot g(p_2)\dots g(p_k)\)。
  3. 若\(T\)中有平方质因子时,有\(g(T\cdot p)=g(T)\cdot p^2\)。

    对于\(T\)大的部分,我们发现\(g(T)=\mu*id^2(T)\),则\(g*I(T)=\mu*I*id^2(T)=e*id^2(T)=id^2(T)=T^2\)。

    则有:

\[\sum_{T=1}^nT^2=\sum_{T=1}^n\sum_{d|T}g(d)=\sum_{T=1}^n\sum_{d|T}\sum_{t|d}\mu(t)\cdot \frac{d^2}{t^2}=\sum_{T=1}^n\sum_{d=1}^{\frac{n}{T}}\sum_{t|d}\mu(t)\cdot\frac{d^2}{t^2}
\\=\sum_{T=1}^n\Phi(\frac{n}{T}),则\Phi(n)=\frac{n\cdot (n+1)\cdot (2\cdot n+1)}{6}-\sum_{T=2}^n\Phi(\frac{n}{T})
\]


【Code】

/*
* @Author: Simon
* @Date: 2019-09-04 15:07:56
* @Last Modified by: Simon
* @Last Modified time: 2019-09-04 16:22:26
*/
#include<bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
#define maxn 1000005
typedef long long ll;
const int mod=1e9+7;
const int Mod=3e6;
int prime[maxn],cnt=0,inv6;
ll phi[maxn],sum[maxn];
bool vis[maxn]={1,1};
void Euler(){ //线性筛
phi[1]=1;
for(int i=2;i<maxn;i++){
if(!vis[i]){
prime[++cnt]=i;
phi[i]=((i*1LL*i%mod-1)%mod+mod)%mod;
}
for(int j=1;j<=cnt&&i*1LL*prime[j]<maxn;j++){
vis[i*prime[j]]=1;
if(i%prime[j]==0){
phi[i*prime[j]]=phi[i]*1LL*prime[j]%mod*prime[j]%mod;
break;
}
phi[i*prime[j]]=phi[i]*1LL*phi[prime[j]];
}
}
for(int i=1;i<maxn;i++) sum[i]=(sum[i-1]+phi[i])%mod;
}
int fpow(int a,int b,int mod){
a%=mod; int ans=1;
while(b){
if(b&1) ans=1LL*ans*a%mod;
a=1LL*a*a%mod;
b>>=1;
}
return ans;
}
unordered_map<ll,ll>mp;
int cal(int n,int k1,int k2){ //等比数列求和公式
if(n==1) return (k2-1)%mod; //特判
int t1=fpow(n,k1+1,mod)-1LL*n*n%mod,t2=n-1;
return 1LL*t1*fpow(t2,mod-2,mod)%mod;
}
int sum_2(int n){
n%=mod;
return 1LL*n%mod*(n+1)%mod*(2*n+1)%mod*inv6%mod;
}
int dfs(int n){ //Phi(n)
if(n<maxn) return sum[n];
if(mp[n]) return mp[n];
int sum=0;
for(int i=2,j;i<=n;i=j+1){
j=n/(n/i);
sum=(sum+(j-i+1)*1LL*dfs(n/i)%mod)%mod;
}
sum=(sum_2(n)-sum)%mod;
mp[n]=sum;
return sum;
}
int main(){
#ifndef ONLINE_JUDGE
//freopen("input.in","r",stdin);
//freopen("output.out","w",stdout);
#endif
ios::sync_with_stdio(false);
cin.tie(0);Euler(); inv6=fpow(6,mod-2,mod);
int T;cin>>T;
while(T--){
mp.clear();
int n;string k;cin>>n>>k;
int t1=0,t2=0;
for(int i=0;i<k.size();i++){
t1=(1LL*t1*10+(k[i]-'0'))%(mod-1);
t2=(1LL*t2*10+(k[i]-'0'))%mod;
}
int ans=0;
for(int i=1,j;i<=n;i=j+1){
j=n/(n/i);
ans=(ans*1LL+(dfs(j)-dfs(i-1))%mod*1LL*cal(n/i,t1,t2)%mod)%mod;
}
cout<<(ans+mod)%mod<<endl;
}
#ifndef ONLINE_JUDGE
cout<<endl;system("pause");
#endif
return 0;
}

2019-ACM-ICPC-南京区网络赛-E. K Sum-杜教筛+欧拉定理的更多相关文章

  1. 2017 ACM/ICPC 南宁区 网络赛 Overlapping Rectangles

    2017-09-24 20:11:21 writer:pprp 找到的大神的代码,直接过了 采用了扫描线+线段树的算法,先码了,作为模板也不错啊 题目链接:https://nanti.jisuanke ...

  2. 2019 ICPC南京站网络赛 H题 Holy Grail(BF算法最短路)

    计蒜客题目链接:https://nanti.jisuanke.com/t/41305 给定的起点是S,终点是T,反向跑一下就可以了,注意判负环以及每次查询需要添加边 AC代码: #include< ...

  3. 2014 ACM/ICPC 鞍山赛区网络赛(清华命题)

    为迎接10月17号清华命题的鞍山现场赛 杭电上的题目 Biconnected(hdu4997)     状态压缩DP Rotate(hdu4998)    相对任一点的旋转 Overt(hdu4999 ...

  4. 【2017 ACM/ICPC 乌鲁木齐赛区网络赛环境测试赛 E】蒜头君的排序

    [链接]h在这里写链接 [题意] 在这里写题意 [题解] 莫队算法+树状数组. 区间增加1或减少1. 对逆序对的影响是固定的. (用冒泡排序变成升序的交换次数,就是逆序对的个数) [错的次数] 0 [ ...

  5. 南京网络赛 E K Sum

    K Sum 终于过了这玩意啊啊啊==== 莫比乌斯反演,杜教筛,各种分块,积性函数怎么线性递推还很迷==,得继续研究研究 #include<bits/stdc++.h> using nam ...

  6. 2019-ACM-ICPC-沈阳区网络赛-K. Guanguan's Happy water-高斯消元+矩阵快速幂

    2019-ACM-ICPC-沈阳区网络赛-K. Guanguan's Happy water-高斯消元+矩阵快速幂 [Problem Description] 已知前\(2k\)个\(f(i)\),且 ...

  7. 2019-ACM-ICPC-南昌区网络赛-H. The Nth Item-特征根法求通项公式+二次剩余+欧拉降幂

    2019-ACM-ICPC-南昌区网络赛-H. The Nth Item-特征根法求通项公式+二次剩余+欧拉降幂 [Problem Description] ​ 已知\(f(n)=3\cdot f(n ...

  8. 2019-ACM-ICPC-南京区网络赛-D. Robots-DAG图上概率动态规划

    2019-ACM-ICPC-南京区网络赛-D. Robots-DAG图上概率动态规划 [Problem Description] ​ 有向无环图中,有个机器人从\(1\)号节点出发,每天等概率的走到下 ...

  9. EOJ Monthly 2019.11 E. 数学题(莫比乌斯反演+杜教筛+拉格朗日插值)

    传送门 题意: 统计\(k\)元组个数\((a_1,a_2,\cdots,a_n),1\leq a_i\leq n\)使得\(gcd(a_1,a_2,\cdots,a_k,n)=1\). 定义\(f( ...

随机推荐

  1. FreeRTOS 时间片,外部中断,任务优先级的一个疑问

    时间片1ms 假设有两个任务,A和B,A任务等待中断里面发出的信号量,B任务在运行 此时,B任务运行了300us的时候中断发生,发出信号量,那么任务A接收到信号量,A任务优先级高,A任务运行 有个问题 ...

  2. 向多个git仓库提交

    查看所有远程仓库 为了不用每次输密码,可以先配置ssh key 查看 添加远程仓库 git remote add origin1 git@other:YYYYYYYYYY/AA.git 向新的代码仓库 ...

  3. centOS安装配置NFS

    环境 nfs 192.168.56.101 client 192.168.56.102 一.yum 安装 yum -y install nfs-utils rpcbind 192.168.56.101 ...

  4. linux 软连接【转】

    https://www.cnblogs.com/kex1n/p/5193826.html这是linux中一个非常重要命令,请大家一定要熟悉.它的功能是为某一个文件在另外一个位置建立一个同不的链接,这个 ...

  5. git和GitHub初级

    使用方式: 一种是本地创建一个文档, 然后在github上创建一个仓库, 在上传上去 一种是从仓库下载代码, 然后在本地编辑, 然后在上传上去 第一种: 首先在linux上创建一个文档, mkdir ...

  6. 创建一个用目录分层的Rust应用

    一:前言,这是Rust基础程序,主要是用来讲解怎么创建分层(类似Java package)的应用: 二:代码实现: 2.1在src下创建main.rs,然后声明main方法,代码如下: fn main ...

  7. Python3实现自动查询成绩(主要使用的包有Tesseract-OCR、PIL、execjs、pytesseract、BeautifulSoup)

    前提:本文仅作为技术训练,不可利用技术做非法的事. 某考试的成绩查询页面如下:查询成绩需要的数据有准考证号或者身份证.考生姓名.验证码.现在使用python来实现自动查询指定人员的考试成绩(不知道准考 ...

  8. LeetCode 590. N叉树的后序遍历(N-ary Tree Postorder Traversal)

    590. N叉树的后序遍历 590. N-ary Tree Postorder Traversal 题目描述 给定一个 N 叉树,返回其节点值的后序遍历. LeetCode590. N-ary Tre ...

  9. Django 在admin中自定义app名

    前提条件,注册时是: 完整的注册,不是直接用app名进行注册 INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'dj ...

  10. Python进阶: Decorator 装饰器你太美

    函数 -> 装饰器 函数的4个核心概念 1.函数可以赋与变量 def func(message): print('Got a message: {}'.format(message)) send ...