https://www.luogu.org/problemnew/show/P2568#sub

最喜欢题面简洁的题目了。

本题为求两个数的gcd是素数,那么我们将x和y拆一下,

假设p为$gcd(x,y)$,且p是一个素数,$x=a \times p , y = b \times p $。

然而要满足p的条件的话,a和b一定是互质的,满足$0 \le a,b \le \frac{n}{p} $

这样的话我们可以枚举这个质数p,将小于$\frac{n}{p}$的数,以及与它互质的数加起来。

互质的数的个数自然想到了欧拉函数,优化想加的话显然前缀和(我就琢磨了半天)

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
#define LL long long
int n;
int prime[],tot;
bool vis[];
LL phi[],ans;
void get_phi()
{
phi[]=;
for(int i=;i<=n;i++)
{
if(!vis[i])prime[++tot]=i,phi[i]=i-;
for(int j=;j<=tot&&prime[j]*i<=n;j++)
{
vis[prime[j]*i]=;
if(i%prime[j]==)
{
phi[i*prime[j]]=phi[i]*prime[j];
break;
}
else phi[i*prime[j]]=phi[i]*phi[prime[j]];
}
}
for(int i=;i<=n;i++)phi[i]=phi[i-]+phi[i];
}
int main()
{
scanf("%d",&n);
get_phi();
for(int i=;i<=tot;i++)ans+=phi[n/prime[i]];
printf("%lld",ans*+tot);
  //乘2的原因就不多说了(x,y)和(y,x)啊。
   之所以再加一个tot是因为我的phi数组定义的phi[1]=0.
}

最新文章

  1. JAVA回调机制(CallBack)详解
  2. [nodemon] Internal watch failed: watch ENOSPC错误解决办法
  3. Python socket超时
  4. 【linux】学习1
  5. C/S B/S 及WEB工作原理
  6. opencv学习笔记(03)——遍历图像(迭代器法)
  7. 重启php-fpm
  8. EasyUI 添加tab页(iframe方式)
  9. HDOJ-ACM1003(JAVA)
  10. docker 查看容器详细
  11. ARM入门实践(一)----Mini6410上最简单的LED点灯裸机程序
  12. linux下安装python3.3.4
  13. 【Sql】mySQL在windows环境启动
  14. Harbor私有镜像仓库(上)
  15. 谷歌浏览器(Chrome)禁止浏览器缓存 设置
  16. Python: 下载底层由Python2转Python3环境更新手记
  17. DG备库缺失归档文件GAP日志
  18. kali下添加PATH环境变量
  19. Apache Flume 学习
  20. JDk1.8源码StringBuffer

热门文章

  1. 重启centOS丢失nginx.pid导致无法启动nginx的解决方法
  2. 关于HTML5画布canvas的功能
  3. Nacos深入浅出(六)
  4. JavaScript进阶 - 第8章 浏览器对象
  5. C# Dictionary类型转json方法之一
  6. 解决git从remote clone后所有文件都改变的问题
  7. 《四 spring源码》手写springmvc
  8. C#数据类型 值传递和引用传递
  9. c#线程倒计时器源码
  10. css:hover伪类的使用