题意:链接

方法:线性欧拉

解析:

首先列一下表达式

gcd(x,y)=z(z是素数而且x,y<=n).

然后我们能够得到什么呢?

gcd(x/z,y/z)=1;

最好还是令y>=x

则能够得到我们要的答案就是∑max(y/z)i=1phi(i)

而max(y/z)就是max(n/z)。

所以仅仅须要枚举一下质数z随便搞一下就好了,最好用前缀和记录

HINT:前缀和写树状数组的都是(*)

代码:

正常人做法1.1s

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define N 10000010
using namespace std;
typedef long long ll;
int n,tot;
int prime[N];
int phi[N];
ll sum[N];
int f[N];
void sieve()
{
phi[1]=1;
sum[1]=1;
for(int i=2;i<=n;i++)
{
if(!f[i])
{
prime[++tot]=i;
phi[i]=i-1;
}
for(int j=1;j<=tot,i*prime[j]<=n;j++)
{
f[i*prime[j]]=1;
if(i%prime[j]==0)
{
phi[i*prime[j]]=phi[i]*prime[j];
break;
}else
{
phi[i*prime[j]]=phi[i]*phi[prime[j]];
}
}
sum[i]=sum[i-1]+phi[i];
}
}
int main()
{
scanf("%d",&n);
sieve();
ll print=0;
for(int i=1;i<=tot;i++)
{
int up=n/prime[i];
print+=sum[up];
}
printf("%lld\n",print*2-tot);
}

树状数组4.8s

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define N 10000010
using namespace std;
typedef long long ll;
int n,tot;
int prime[N];
int phi[N];
ll sum[N];
int f[N];
int lowbit(int x){return x&(-x);}
void update(int x,int p)
{
while(x<=n)
{
sum[x]+=p;
x+=lowbit(x);
}
}
ll getsum(int x)
{
ll ret=0;
while(x)
{
ret+=sum[x];
x-=lowbit(x);
}
return ret;
}
void sieve()
{
phi[1]=1;
update(1,1);
for(int i=2;i<=n;i++)
{
if(!f[i])
{
prime[++tot]=i;
phi[i]=i-1;
update(i,phi[i]);
}
for(int j=1;j<=tot,i*prime[j]<=n;j++)
{
f[i*prime[j]]=1;
if(i%prime[j]==0)
{
phi[i*prime[j]]=phi[i]*prime[j];
update(i*prime[j],phi[i*prime[j]]);
break;
}else
{
phi[i*prime[j]]=phi[i]*phi[prime[j]];
update(i*prime[j],phi[i*prime[j]]);
}
}
}
}
int main()
{
scanf("%d",&n);
sieve();
ll print=0;
for(int i=1;i<=tot;i++)
{
int up=n/prime[i];
print+=getsum(up);
}
printf("%lld\n",print*2-tot);
}

BZOJ 2818 Gcd 线性欧拉的更多相关文章

  1. BZOJ 2818 Gcd 线性欧拉筛(Eratosthenes银幕)

    标题效果:定整N(N <= 1e7),乞讨1<=x,y<=N和Gcd(x,y)素数的数(x,y)有多少.. 思考:推,. 建立gcd(x,y) = p,然后,x / p与y / p互 ...

  2. bzoj 2818 gcd 线性欧拉函数

    2818: Gcd Time Limit: 10 Sec  Memory Limit: 256 MB[Submit][Status][Discuss] Description 给定整数N,求1< ...

  3. bzoj 2818 GCD 数论 欧拉函数

    bzoj[2818]Gcd Description 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. Input 一个整数N Output 如题 Samp ...

  4. BZOJ 2818 GCD 【欧拉函数 || 莫比乌斯反演】

    传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=2818 2818: Gcd Time Limit: 10 Sec  Memory Limit ...

  5. bzoj 2818 Gcd(欧拉函数 | 莫比乌斯反演)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2818 [题意] 问(x,y)为质数的有序点对的数目. [思路一] 定义f[i]表示i之 ...

  6. BZOJ 2818 GCD(欧拉函数)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=37161 题意:gcd(x, y) = 质数, 1 <= x, ...

  7. 【BZOJ】2818: Gcd(欧拉函数+质数)

    题目 传送门:QWQ 分析 仪仗队 呃,看到题后感觉很像上面的仪仗队. 仪仗队求的是$ gcd(a,b)=1 $ 本题求的是$ gcd(a,b)=m $ 其中m是质数 把 $ gcd(a,b)=1 $ ...

  8. HYSBZ 2818 Gcd【欧拉函数/莫比乌斯】

    I - Gcd HYSBZ - 2818 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. Input 一个整数N Output 如题 Sample In ...

  9. 【BZOJ】2818: Gcd(欧拉函数/莫比乌斯)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2818 我很sb的丢了原来做的一题上去.. 其实这题可以更简单.. 设 $$f[i]=1+2 \tim ...

随机推荐

  1. java面试题之select、poll和epoll的区别

    消息传递方式: select:内核需要将消息传递到用户空间,需要内核的拷贝动作: poll:同上: epoll:通过内核和用户空间共享一块内存来实现,性能较高: 文件句柄剧增后带来的IO效率问题: s ...

  2. Fedora 14 安装完后的设置 添加源 更新软件

    1.添加源:   (1)上海交大源:应用程序->系统工具->终端 输入 su    输入密码 输入   nano /etc/yum.repos.d/sjtu.repo 辅之以下内容: [F ...

  3. poj 3293 Rectilinear polygon

    Rectilinear polygon Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2125   Accepted: 24 ...

  4. 3 月 15 个有意思的 JavaScript 和 CSS 库

    Tutorialzine 旨在让你了解最新最酷的 Web 发展趋势.这就是我们每个月为何都会发布一些我们偶然发现并认为值得你关注的优秀资源的原因. BasicScroll https://github ...

  5. size_t、ptrdiff_t【转】

    转自:http://www.cnblogs.com/liulipeng/archive/2012/10/08/2715246.html http://longzxr.blog.sohu.com/196 ...

  6. Python入门--20--类、对象

    OO=Object Oriented 面向对象 python是面向对象的编程语言 OO的特征: 1.封装:把一堆东西都扔到一起,变为一个类 2.继承:假如一个类里面 3.多态:不同的类有相同名称的函数 ...

  7. Java原来如此-几种常见的排序--冒泡排序(Bubble Sort)

    冒泡排序的原理:假设要求的数组是正序,两两进行比较,如果前一个数比后一个数小,位置不变.如果前一个数比后一个数大,位置互换,再跟后一个数进行比较,直到最后.就是逐步把大数送到最后. 举个例子:int[ ...

  8. 串口VMIN VTIME 详解

    原文地址: 以前跟着做过VxWorks的开发,主要通信方式是串口,因为底层BSP包已经做好了,串口通信非常简单.后来接触Linux,在一块OK6410上跑Linux串口通信,才发现原来天真的以为甚是简 ...

  9. CodeForces - 393E Yet Another Number Sequence

    Discription Everyone knows what the Fibonacci sequence is. This sequence can be defined by the recur ...

  10. 正确使用Block避免Cycle Retain和Crash

    Block简介 Block作为C语言的扩展,并不是高新技术,和其他语言的闭包或lambda表达式是一回事.需要注意的是由于Objective-C在iOS中不支持GC机制,使用Block必须自己管理内存 ...