\(\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)\)

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<map>
  4. #include<vector>
  5. #include<queue>
  6. #define ll long long
  7. #define N 100005
  8. #define mod ((ll)1e9 + 7)
  9. int n,a[N];
  10. int phi[N];
  11. int vis[N];
  12. int Cnt,pri[N];
  13. std::vector<int>Q[N];
  14. inline void sieve(){
  15. phi[1] = 1;
  16. for(int i = 2;i < N;++i){
  17. if(!vis[i])
  18. phi[i] = i - 1,pri[++Cnt] = i;
  19. for(int j = 1;pri[j] * i < N && j <= Cnt;++j){
  20. vis[i * pri[j]] = 1;
  21. if(i % pri[j] == 0){
  22. phi[i * pri[j]] = phi[i] * pri[j];
  23. break;
  24. }else{
  25. phi[i * pri[j]] = phi[i] * (pri[j] - 1);
  26. }
  27. }
  28. }
  29. for(int i = 1;i < N;++i)
  30. for(int j = 1;j * i < N;++j)
  31. Q[i * j].push_back(i);
  32. }
  33. ll ans = 0;
  34. int cnt[N];
  35. #define p(x) ((x >= mod) ? x - mod : x)
  36. inline void del(int u){
  37. // std::cout<<u<<std::endl;
  38. ll now = 0;
  39. for(int i = u;i <= n;i += u){
  40. for(int j = 0;j < Q[a[i]].size();++j){
  41. now = p(now + p(p((p(cnt[Q[a[i]][j]] * 2) % mod + 1)) * phi[Q[a[i]][j]]) % mod);
  42. cnt[Q[a[i]][j]] ++ ;
  43. }
  44. }
  45. for(int i = u;i <= n;i += u){
  46. for(int j = 0;j < Q[a[i]].size();++j){
  47. cnt[Q[a[i]][j]] = 0 ;
  48. }
  49. }
  50. ans = p(ans + 1ll * phi[u] * p(now) % mod);
  51. }
  52. int main(){
  53. sieve();
  54. scanf("%d",&n);
  55. for(int i = 1;i <= n;++i)
  56. scanf("%d",&a[i]);
  57. for(int i = 1;i <= n;++i)
  58. del(i);
  59. std::cout<<ans<<std::endl;
  60. }

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. 洛谷 P5658 [CSP-S2019] 括号树

    链接: P5658 分析: 显然我们应该在dfs树的同时维护每个点的答案. 注意到第 \(u\) 个点的答案可以分成两部分,不包含 \(u\) 点时的答案,和加入 \(u\) 点后新增的答案,前者可以 ...

  2. 洛谷 P6075 [JSOI2015]子集选取

    链接:P6075 前言: 虽然其他大佬们的走分界线的方法比我巧妙多了,但还是提供一种思路. 题意: %&¥--@#直接看题面理解罢. 分析过程: 看到这样的题面我脑里第一反应就是DP,但是看到 ...

  3. CSP-S 2021 退役记

    写的比较草率,但的确是真实感受. 10.23 回寝室前敲了一个 dinic 板子,觉得不会考... 10.24 8:00 起床,还好今天宿管不在,可以起的晚一点. 吃了早饭来机房颓废. 10:00 似 ...

  4. 手把手教你学Dapr - 3. 使用Dapr运行第一个.Net程序

    上一篇:手把手教你学Dapr - 2. 必须知道的概念 注意: 文章中提到的命令行工具即是Windows Terminal/PowerShell/cmd其中的一个,推荐使用Windows Termin ...

  5. nvidia-msi命令解读

    nvidia-msi 或者 watch -n 1 nvidia-smi 打印出表格中: 第一栏的Fan:N/A是风扇转速,从0到100%之间变动,这个速度是计算机期望的风扇转速,实际情况下如果风扇堵转 ...

  6. jquery 实现 <imput>标签 密码框显示/隐藏密码功能

    1 <!doctype html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 < ...

  7. Go语言实现APPID登录

    package thirdparty import ( "crypto/rsa" "fmt" "github.com/dgrijalva/jwt-go ...

  8. 负载均衡算法WRR介绍

    一.负载均衡 负载均衡是一个很大的概念,既有从硬件层面来解决问题的,又有从软件层面解决的,有关负载均衡的介绍,推荐阅读: http://os.51cto.com/art/201108/285359.h ...

  9. 说Redis

    一:简单介绍 Redis(Remote Dictionary Server 远程字典服务器) key-value 内存数据库 key是一个string value可以是string,list,hash ...

  10. 解读Java8的Thread源码

    1.创建的一个无参的Thread对象,默认会有一个线程名,以Thread-开头,从0开始计数,采用了一个static修饰的int变量,当对象初始化一次时一直存放在jvm方法区中 2.构造Thread的 ...