对于这道题,我们要求的是 \(\displaystyle \sum_{i=1}^{N}\sum_{j = 1} ^{N}\) gcd(i,j)为质数

首先我们很容易想出来怎么打暴力,我们可以对于每个 i 和 j 都求一遍他们的gcd 最后累计一下gcd为质数的就完成了。

可是这样得神仙时间复杂度 为O(n^2), 对于这道题,我们肯定 会 TLE。

然后我们只能苦逼的想正解QAQ

然后就开始我们的推柿子时间QAQ

我们考虑这样一个柿子

gcd(x,y) = p

那么这个柿子可以写成 gcd(x' * p , y' * p) = p

提出p来就可以变成 gcd(x',y') = 1; x' = x / p ,y' = y / p ;

这个柿子是不是很熟悉QAQ

gcd(i,j) = 1 不就相当于 \(\displaystyle\sum_{i=1}^{N}\varphi(i)\)​

因为对于每个j 我们要算 有多少个i满足 1 <= i < j 并且 gcd(i,j) = 1。这样的i的数量恰好是

\(\displaystyle\varphi(j)\)

不会的童鞋请看 仪仗队那个题。。。

那么我们考虑每个p的贡献,我们要强制把上面的柿子 乘以二,在减去一。

乘以二其实很简单,因为他每个点 (i,j) 等同于(j,i)这个点,因此我们要强制乘二。

减一呢 是因为当 x' = y' = 1 时 ,即当 x = y = p的时候这个点算了两遍,但(x,y)(x=y)这个数对

只有一个所以要减一。

综上对于每个p,他的贡献就是 \(\displaystyle\sum_{i=1}^{N\over p}\varphi(i)\) *2 -1.

那么有多少个这样的p呢???

其实p就是N以内的质数,对于每个p,求一下他的贡献,在相加,不就可以轻松AC了吗QAQ。。。

那么最后的总柿子就是

\(\displaystyle\sum_{p}\sum_{i=1}^{N\over p}\)​ φ(i)-1 ( p 是1~n的质数)

优化 我们再求p的贡献时,不必要一个个的去求欧拉函数的值,我们可以考虑维护

一下前缀和。这样就会减少不少时间了...

最后附上我的代码

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int N = 1e7+10;
long long n,ans = 0,cnt;
long long prime[N] ,phi[N], tot[N];
bool check[N];
void calc(int n){//边进行欧拉筛,边求欧拉函数
memset(check,-1,sizeof(check));
phi[1] = 1;
for(int i = 2; i <= n; i++){
if(check[i]){
phi[i] = i-1;
prime[++cnt] = i;
}
for(int j = 1; j <= cnt; j++){
if(i * prime[j] > n) break;
check[i*prime[j]] = 0;
if(i % prime[j] == 0){
phi[i*prime[j]] = phi[i] * prime[j];
break;
}
else{/积性函数性质
phi[i*prime[j]] = phi[i] * phi[prime[j]];
}
}
}
for(int i = 1; i <= n; i++) tot[i] = tot[i-1] + phi[i];//前缀和
}
int main(){
scanf("%d",&n);
calc(n);
for(int i = 1; i <= cnt; i++){//枚举每个p
ans += 2 * tot[n/prime[i]] - 1;//求p的贡献
}
printf("%d\n",ans)
return 0;
}

本蒟蒻码风过丑,不喜勿喷。。。。

//手敲不易,点个

最后完美结束,✿✿ヽ(°▽°)ノ✿ QAQ 。。。

最新文章

  1. CentOS 7.2安装docker-compose运行gitlib
  2. 几个最常用的git命令
  3. DevExpress 中 WaitForm 使用
  4. ES5中数组新增的方法说明
  5. Linux命令之 文件归档管理
  6. UVA 11925 - Generating Permutations
  7. mysql下的SELECT INTO语句
  8. gcc代码反汇编查看内存分布[1]: gcc
  9. Latex—IEEE Latex模板 期刊名带下划线的问题解决
  10. Windows Redis默认配置文件,Redis配置不生效解决方案
  11. Android studio 使用问题汇总
  12. BZOJ_1015_[JSOI2008]星球大战_并查集
  13. MySQL中int(m)的含义
  14. Codeforces1062A. A Prank(暴力)
  15. 高性能mysql 第五章 索引部分总结
  16. Spring的控制反转和依赖注入
  17. unix环境高级编程-3.10-文件共享(转)
  18. Restful framework【第三篇】序列化组件
  19. php 字符编码转换
  20. Oracle EBS主界面的Top Ten List

热门文章

  1. Macbook Pro HDMI 无信号解决办法
  2. Java HashMap源码
  3. MySQL 数据库中的基础操作
  4. 面试【JAVA基础】JVM
  5. ASP.NET Uploadify 上传文件过大 报错(http error)借鉴,以防忘记
  6. python简介以及简单代码——python学习笔记(一)
  7. webapi上传图片的两种方式
  8. 20190918-03关机重启命令及修改root密码 000 006
  9. Linux下Python3.6的安装及避坑指南
  10. Python算法题:有100只大、中、小骆驼,100框土豆,一只大骆驼可以背3框,中骆驼可以背俩框,小骆驼两只背一筐,问大中小各有多少只骆驼?