P 2568 GCD
对于这道题,我们要求的是 \(\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的更多相关文章
- [luogu 2568] GCD (欧拉函数)
题目描述 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. 输入输出格式 输入格式: 一个整数N 输出格式: 答案 输入样例#1: 4 输出样例#1: 4 ...
- GCD(洛谷 2568)
题目描述 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. 输入格式 一个整数N 输出格式 答案 输入输出样例 输入 #1 4 输出 #1 4 说明/提示 ...
- 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的个数. (文末有题) 知 ...
随机推荐
- Android开发之将Edittext输入弹出的软键盘设置搜索确定键。详细代码,已验证可用。
1,首先在布局中添加 android:imeOptions="actionSearch 2,然后java代码中设置代码: et_input_password.setOnEditorActio ...
- Android开发值利用Intent进行put传值,setclass启动activity,并用get进行取值
传值方法一 [java] Intent intent = new Intent(); Bundle bundle = new Bundle(); //该类用作携带数据 bundle.putString ...
- 【小白学PyTorch】5 torchvision预训练模型与数据集全览
文章来自:微信公众号[机器学习炼丹术].一个ai专业研究生的个人学习分享公众号 文章目录: 目录 torchvision 1 torchvision.datssets 2 torchvision.mo ...
- python3笔记-字典
5 1 # 创建字典 6 2 d=dict(name='lily',age=18,phone='') 7 3 print(d) 4 # {'name': 'lily', 'age': 18, 'pho ...
- Redux异步解决方案之Redux-Thunk原理及源码解析
前段时间,我们写了一篇Redux源码分析的文章,也分析了跟React连接的库React-Redux的源码实现.但是在Redux的生态中还有一个很重要的部分没有涉及到,那就是Redux的异步解决方案.本 ...
- Mybatis源码学习第七天(插件开发原理)
插件概述: 插件是用来改变或者扩展mybatis的原有功能,mybatis的插件就是通过继承Interceptor拦截器实现的,在没有完全理解插件之前j禁止使用插件对mybatis进行扩展,有可能会导 ...
- 使用java.io.RandomAccessFile更改文本文件的内容
原文本内容: 2020-01-21 08:31:08.520 [main] INFO logbackCfg.App -秦时明月汉时关 2020-01-21 08:31:08.521 [main] ER ...
- Echars 参数说明
theme = { // 全图默认背景 // backgroundColor: 'rgba(0,0,0,0)', // 默认色板 color: ['#ff7f50','#87cefa','#da70d ...
- PHP学习路线图(转)
PHP学习路线图 在网上很多人公布了太多的PHP学习路线图,本人在互联网公司工作十余年,也带了很多PHP入门的新手,将他们的一些问题和学习路线图为大家整理出来,希望很多小白少走弯路. 一. 网上某些错 ...
- [算法]美团春招笔试题C-求有趣子序列数(DP)
题目 输入n,以及长度为n的数组元素 输出数组的非空子序列中有多少个"有趣序列"mod 998244353,有趣序列指所有元素满足arr[i]%i == 0, i从0记. 例: 输 ...