\(\sum\sum gcd(i,j) \times gcd(a_i,a_j)\)

考虑枚举这个 \(gcd(i,j)\) 。

\(\sum_d \varphi(d)\sum_{i|d}\sum_{j|d} gcd(a_i,a_j)\)

考虑后者等同于计算\(\sum_i\sum_j gcd(a_i,a_j)\)

我们考虑枚举约数 \(d\),那么会 \(d | gcd\) 的情况为 \((\sum[d | a_i]) ^ 2\)

考虑我们要求的是最大公约数,而非约数。

但是我们有\(x = \sum_{d|x}\varphi(x)\)

我们在情况数前加上一个系数即可。

转而求

\(\sum_d \varphi(d)\sum_t \varphi(t) (\sum[t | a_{k * d}]) ^ 2\)

那么预处理出因数,我们枚举 \(d\) ,然后 \(O(nln)\) 的遍历 \(a_i\) ,然后一次 \(d(n)\) 的处理一个数。

那么复杂度为预处理\(O(nln)\),计数复杂度\(O(\sum \lfloor\frac{n}{i} \rfloor d(i)) \leq O(Max{d(u)}nln)\)

#include<iostream>
#include<cstdio>
#include<map>
#include<vector>
#include<queue>
#define ll long long
#define N 100005
#define mod ((ll)1e9 + 7) int n,a[N];
int phi[N];
int vis[N];
int Cnt,pri[N]; std::vector<int>Q[N]; inline void sieve(){
phi[1] = 1;
for(int i = 2;i < N;++i){
if(!vis[i])
phi[i] = i - 1,pri[++Cnt] = i;
for(int j = 1;pri[j] * i < N && j <= Cnt;++j){
vis[i * pri[j]] = 1;
if(i % pri[j] == 0){
phi[i * pri[j]] = phi[i] * pri[j];
break;
}else{
phi[i * pri[j]] = phi[i] * (pri[j] - 1);
}
}
}
for(int i = 1;i < N;++i)
for(int j = 1;j * i < N;++j)
Q[i * j].push_back(i);
} ll ans = 0; int cnt[N]; #define p(x) ((x >= mod) ? x - mod : x) inline void del(int u){
// std::cout<<u<<std::endl;
ll now = 0;
for(int i = u;i <= n;i += u){
for(int j = 0;j < Q[a[i]].size();++j){
now = p(now + p(p((p(cnt[Q[a[i]][j]] * 2) % mod + 1)) * phi[Q[a[i]][j]]) % mod);
cnt[Q[a[i]][j]] ++ ;
}
}
for(int i = u;i <= n;i += u){
for(int j = 0;j < Q[a[i]].size();++j){
cnt[Q[a[i]][j]] = 0 ;
}
}
ans = p(ans + 1ll * phi[u] * p(now) % mod);
} int main(){
sieve();
scanf("%d",&n);
for(int i = 1;i <= n;++i)
scanf("%d",&a[i]);
for(int i = 1;i <= n;++i)
del(i);
std::cout<<ans<<std::endl;
}

CF1575G GCD Festival的更多相关文章

  1. Objective-C三种定时器CADisplayLink / NSTimer / GCD的使用

    OC中的三种定时器:CADisplayLink.NSTimer.GCD 我们先来看看CADiskplayLink, 点进头文件里面看看, 用注释来说明下 @interface CADisplayLin ...

  2. iOS 多线程之GCD的使用

    在iOS开发中,遇到耗时操作,我们经常用到多线程技术.Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法,只需定义想要执行的任务,然后添加到适当的调度队列 ...

  3. 【swift】BlockOperation和GCD实用代码块

    //BlockOperation // // ViewController.swift import UIKit class ViewController: UIViewController { @I ...

  4. 修改版: 小伙,多线程(GCD)看我就够了,骗你没好处!

    多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术.具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能.具有这种能力的系 ...

  5. GCD的相关函数使用

    GCD 是iOS多线程实现方案之一,非常常用 英文翻译过来就是伟大的中枢调度器,也有人戏称为是牛逼的中枢调度器 是苹果公司为多核的并行运算提出的解决方案 1.一次性函数 dispatch_once 顾 ...

  6. hdu1695 GCD(莫比乌斯反演)

    题意:求(1,b)区间和(1,d)区间里面gcd(x, y) = k的数的对数(1<=x<=b , 1<= y <= d). 知识点: 莫比乌斯反演/*12*/ 线性筛求莫比乌 ...

  7. hdu2588 GCD (欧拉函数)

    GCD 题意:输入N,M(2<=N<=1000000000, 1<=M<=N), 设1<=X<=N,求使gcd(X,N)>=M的X的个数.  (文末有题) 知 ...

  8. BZOJ 2820: YY的GCD [莫比乌斯反演]【学习笔记】

    2820: YY的GCD Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1624  Solved: 853[Submit][Status][Discu ...

  9. BZOJ 2818: Gcd [欧拉函数 质数 线性筛]【学习笔记】

    2818: Gcd Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 4436  Solved: 1957[Submit][Status][Discuss ...

随机推荐

  1. 小白自制Linux开发板 五. Debian文件系统制作,以及WIFI配置、交换分区配置

    该片文章将完整记录一个Debian的最小文件系统的生成,以及自定义配置WIFI组件.网络组件和交换分区配置 本文章参考:https://whycan.com/t_4236.htmlhttp://www ...

  2. Markdown Reference

    Markdown For Typora Overview Markdown is created by Daring Fireball; the original guideline is here. ...

  3. 时间轮机制在Redisson分布式锁中的实际应用以及时间轮源码分析

    本篇文章主要基于Redisson中实现的分布式锁机制继续进行展开,分析Redisson中的时间轮机制. 在前面分析的Redisson的分布式锁实现中,有一个Watch Dog机制来对锁键进行续约,代码 ...

  4. 初学Python-day7 案例(乘法口诀 已更新!!)

    案例::(乘法口诀)  用for循环做乘法口诀: 1 # 第一种 2 for i in range(1, 10): 3 for j in range(1, i + 1): 4 print('{} * ...

  5. HTTP标签

    系统的http状态码知识,我是在<图解http里学习的>. 状态码的职责是告知从服务器端返回的请求结果. 分类如下: 2XX --> 成功 200 OK(一般情况) 204 No C ...

  6. 【好好编程-技术博客】微信小程序开发中前后端的交互

    微信小程序开发中前后端的交互 微信小程序的开发有点类似与普通网页的开发,但是也不尽然相同.小程序的主要开发语言是JavaScript,开发同普通的网页开发有很大的相似性,对于前端开发者而言,从网页开发 ...

  7. 2021.7.17 NKOJ周赛总结

    发现自己简直是个智障:T1模数写成1e9+9:T2居然没有考虑刚好一个周期的情况:T4用"%lld"读入"unsigned long long".~qwq~ T ...

  8. Unity的Deferred Shading

    什么是Deferred Shading Unity自身除了支持前向渲染之外,还支持延迟渲染.Unity的rendering path可以通过Edit/Project Settings中的Graphic ...

  9. Makefile目标文件搜索(VPATH和vpath

    转载:http://c.biancheng.net/view/7051.html 我们都知道一个工程文件中的源文件有很多,并且存放的位置可能不相同(工程中的文件会被放到不同的目录下),所以按照之前的方 ...

  10. Python AttributeError: module 'string' has no attribute 'atoi'

    python2 中可以用string.atoi 在python3中会报错 替换的方案是 string.atoi(your_str) 替换为 int(your_str) 这个代码python2和pyth ...