CF1575G GCD Festival
\(\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的更多相关文章
- Objective-C三种定时器CADisplayLink / NSTimer / GCD的使用
OC中的三种定时器:CADisplayLink.NSTimer.GCD 我们先来看看CADiskplayLink, 点进头文件里面看看, 用注释来说明下 @interface CADisplayLin ...
- iOS 多线程之GCD的使用
在iOS开发中,遇到耗时操作,我们经常用到多线程技术.Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法,只需定义想要执行的任务,然后添加到适当的调度队列 ...
- 【swift】BlockOperation和GCD实用代码块
//BlockOperation // // ViewController.swift import UIKit class ViewController: UIViewController { @I ...
- 修改版: 小伙,多线程(GCD)看我就够了,骗你没好处!
多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术.具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能.具有这种能力的系 ...
- GCD的相关函数使用
GCD 是iOS多线程实现方案之一,非常常用 英文翻译过来就是伟大的中枢调度器,也有人戏称为是牛逼的中枢调度器 是苹果公司为多核的并行运算提出的解决方案 1.一次性函数 dispatch_once 顾 ...
- hdu1695 GCD(莫比乌斯反演)
题意:求(1,b)区间和(1,d)区间里面gcd(x, y) = k的数的对数(1<=x<=b , 1<= y <= d). 知识点: 莫比乌斯反演/*12*/ 线性筛求莫比乌 ...
- hdu2588 GCD (欧拉函数)
GCD 题意:输入N,M(2<=N<=1000000000, 1<=M<=N), 设1<=X<=N,求使gcd(X,N)>=M的X的个数. (文末有题) 知 ...
- BZOJ 2820: YY的GCD [莫比乌斯反演]【学习笔记】
2820: YY的GCD Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1624 Solved: 853[Submit][Status][Discu ...
- BZOJ 2818: Gcd [欧拉函数 质数 线性筛]【学习笔记】
2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 4436 Solved: 1957[Submit][Status][Discuss ...
随机推荐
- NX9.0和NX10.0做自定义操作可以用的函数
NX9.0:LIBUFUNX.DLL int UF_OPER_ask_check_geom(void *,int *,unsigned int * *) int UF_OPER_ask_first_o ...
- HashMap、ConcurrentHashMap红黑树实现分析
本文学习知识点 1.二叉查找树,以及二叉树查找带来的问题. 2.平衡二叉树及好处. 3.红黑树的定义及构造. 4.ConcurrentHashMap中红黑树的构造. 在正式分析红黑树之前,有必要了解红 ...
- vue3 element-plus 配置json快速生成form表单组件,提升生产力近600%(已在公司使用,持续优化中)
️本文为博客园社区首发文章,未获授权禁止转载 大家好,我是aehyok,一个住在深圳城市的佛系码农♀️,如果你喜欢我的文章,可以通过点赞帮我聚集灵力️. 个人github仓库地址: https:gi ...
- UVA-1498 Activation
UVA-1498 DP应该是肯定的,设 f [ i ] [ j ] 表示现在对中共有 i 人,Tomato在第 j 个,出现所求情况的概率,我们可以很(简单的)艰难的列出下列方程: f[i][1] = ...
- JAVA笔记1__基本数据类型/输入输出/随机数/数组
/**八种基本数据类型 boolean byte short int long char float double */ public class test1{ public static void ...
- XOR算法
原理 依据的是异或门 即同为0,异为1 0^0=0 0^1=1 1^0=1 1^1=0 对一个数据进行两次XOR运算会得到这个数据本身 所以加密时就将message和其对应的key进行一波XOR运算得 ...
- 精心整理Java微服务最全面试题集(含答案)
微服务架构相关 大型网站架构演变过程 网站架构演变演变过程 传统架构 → 分布式架构 → SOA架构 → 微服务架构 什么是分布式架构 分布式架构就是将传统结构按照模块进行拆分,不同的人负责不同的模块 ...
- 用python写一个自动化盲注脚本
前言 当我们进行SQL注入攻击时,当发现无法进行union注入或者报错等注入,那么,就需要考虑盲注了,当我们进行盲注时,需要通过页面的反馈(布尔盲注)或者相应时间(时间盲注),来一个字符一个字符的进行 ...
- Docker 18.03导入导出
docker中分容器和镜像,简单可以理解为容器是运行中的实例,镜像是运行实例所需的静态文件. 导入导出既可以对容器做操作,也可以对镜像做操作.区别在于镜像可以随时导出,容器必须要停止之后才可以导出,否 ...
- 记录自己的踩坑第一天 | CSS:vertical-align 属性
前言 最近老师让大家单独写前后端分离项目,真是大家卷完后端,一起去卷前端了.(我以前都是主要负责后端,处于只大致看的懂的级别,说多了都是泪啊). 真是处于一边学一边写的状态,基本就是每天早上看上两~三 ...