博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 2818 Gcd
阅读量:7294 次
发布时间:2019-06-30

本文共 1155 字,大约阅读时间需要 3 分钟。

题解:设p为素数 ,则gcd(x/p,y/p)=1也就是说求 x/p以及 y/p的欧拉函数。欧拉筛+前缀和就可以解决

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
//#include
//CLOCKS_PER_SEC#define se second#define fi first#define ll long long#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define Pii pair
#define Pli pair
#define ull unsigned long long#define pb push_back#define fio ios::sync_with_stdio(false);cin.tie(0)const int N=1e7+10;const ull base=163;const int INF=0x3f3f3f3f;using namespace std;bool ispri[N];ll pri[N],phi[N];int tot=0;void getphi(int x){ memset(ispri,1,sizeof(ispri)); ispri[1]=false; phi[1]=1; for(int i=2;i<=x;i++) { if(ispri[i]) { pri[++tot]=i; phi[i]=i-1; } for(int j=1;j<=tot&&i*pri[j]<=x;j++) { ispri[i*pri[j]]=false; if(i%pri[j]==0) { phi[i*pri[j]]=phi[i]*pri[j]; break; } phi[i*pri[j]]=phi[i]*(pri[j]-1); } }}ll sum[N];int main(){ int n; cin>>n; getphi(n); ll ans=0; for(int i=1;i<=n;i++)sum[i]=phi[i]+sum[i-1]; for(int i=1;i<=tot;++i){ ans+=sum[n/pri[i]]*2-1; } cout<
<

 

转载于:https://www.cnblogs.com/Mrleon/p/9097806.html

你可能感兴趣的文章
【译文】AppBarLayout的越界滚动行为
查看>>
Java集合大整理
查看>>
(NO.00003)iOS游戏简单的机器人投射游戏成形记(七)
查看>>
x264代码剖析(十四):核心算法之宏块编码函数x264_macroblock_encode()
查看>>
Android中dip、dp、sp、pt和px的区别
查看>>
正则验证js大全
查看>>
浅析x86架构中cache的组织结构
查看>>
JDateTime
查看>>
深入了解MyBatis二级缓存
查看>>
Cloud Test 单页面即时监测功能上线!
查看>>
一分钟了解阿里云产品:阿里云解析五大热点技术问题分析
查看>>
mysql TableMap id递增问题
查看>>
我不是大佬!
查看>>
你也许不知道的Vuejs - 使用ES6快乐的玩耍
查看>>
我理解的javascript事件循环(一)
查看>>
实现基于注解(Annotation)的数据库框架(三)自定义注解(Annotation)
查看>>
手机动态码登录
查看>>
JavaScript 字符串连接性能比较
查看>>
基于element-ui实现table可配置化
查看>>
项目遇到的问题或处理办法
查看>>