对于这道题,我们要求的是 \(\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 。。。

P 2568 GCD的更多相关文章

  1. [luogu 2568] GCD (欧拉函数)

    题目描述 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. 输入输出格式 输入格式: 一个整数N 输出格式: 答案 输入样例#1: 4 输出样例#1: 4 ...

  2. GCD(洛谷 2568)

    题目描述 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. 输入格式 一个整数N 输出格式 答案 输入输出样例 输入 #1 4 输出 #1 4 说明/提示 ...

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

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

  4. iOS 多线程之GCD的使用

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

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

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

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

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

  7. GCD的相关函数使用

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

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

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

  9. hdu2588 GCD (欧拉函数)

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

随机推荐

  1. 简单介绍HTML5 Landmark

    最近在进行无障碍相关文档翻译的时候遇到了 landmark 的概念,在网上搜了下发现没有相关的中文资料,因此写一篇博客简单介绍一下. 什么是 Landmark Landmark 是一种用来表示网页组织 ...

  2. C++ —— 输出100以内的质数

    代码如下: #include<iostream> #include<math.h> using namespace std; int main() { int i; for(i ...

  3. idea报错cannot resolve symbol servlet

    解决方法:在project structure中导入包.该包在tomcat安装目录的lib文件夹.导入之后点击Apply.

  4. 用于测试 SqlAnalyzer1.01 的21个测试用例

    感慨:当年看着 https://www.cnblogs.com/heyang78/p/11451814.html 一文望洋兴叹,如今我也自己做出来了! 21. 原文=select name, cnt ...

  5. Oracle SQL 判断某表是否存在

    SQL> SELECT COUNT (*) as cnt FROM ALL_TABLES WHERE table_name = UPPER('your_table'); CNT -------- ...

  6. PostgressQL

    环境 ubuntu18.04 docker 中 pull postgres:10 images 连接 进入容器内部 docker exec -it [mypostgres] /bin/bash 查看p ...

  7. 提交并发量的方法:Java GC tuning :Garbage collector

    三色算法,高效率垃圾回收,jvm调优 Garbage collector:垃圾回收器 What garbage? 没有任何引用指向它的对象 JVM GC回收算法: 引用计数法(ReferenceCou ...

  8. 顶 最新简捷实用的JSP动态网站环境搭建详细步骤

    阿里西西小编给您推荐这个最新简捷实用的JSP动态网站环境搭建详细步骤讲解,这里还有关于JSP 动态网站 环境 搭建 的教程,希望您能够喜欢并学到东西提升自己的知识与技能,下面是内容详细阅读: 最新简捷 ...

  9. mysql1045问题解决

    输入mysql -u root -P 1202 -h localhost -p时报错mysql1045 解决方法:my.ini中加上skip-grant-tables后重启mysql服务即可解决

  10. 吴恩达《深度学习》-课后测验-第一门课 (Neural Networks and Deep Learning)-Week 3 - Shallow Neural Networks(第三周测验 - 浅层神 经网络)

    Week 3 Quiz - Shallow Neural Networks(第三周测验 - 浅层神经网络) \1. Which of the following are true? (Check al ...