2818:GCD

Description

给定整数$N$,求$1\le x,y\le N$且$\gcd{x,y}$为素数的数对$(x,y)$有多少对.

Input

$N$

Output

RT

Sample

Input
----------------
4 Output
----------------
4

Hint

4个解为$(2,2)$,$(3,3)$,$(2,4)$,$(4,2)$

$1\le N\le 10^7$

Source

湖北省队互测

这道题目很有意思.

我们将一个数$A$质因数分解:$A=p_1^{m_1}p_2^{m_2}\dots p_n^{m_n}$其中$p_i$是连续素数,记为$FS(A)=\left[m_1,m_2\dots\right]$.对于每一个数来说他们的分解都是唯一的(算术基本定理).

我们将$FS(A)=a$的反函数记为$SF(a)=A$.

那么$\gcd{A,B}=SF([(\min{FS(A)[0],FS(B)[0]}),\dots])$.

那么,易证$\gcd{\frac{A}{m},\frac{B}{m}}=\frac{\gcd{a,b}}{m}$.

因此,我们可以将原问题稍稍转化下,我们可以求$1\le x,y\le \lfloor\frac{N}{p}\rfloor$(其中$p$是一个素数)时$\gcd{x,y}=1$的组数.注意到这个问题中$x,y$互质,那么我们从下到大枚举$y$,算出$\phi(y)$的和相加.由于考虑顺序,组数要乘以$2$,由于$(1,1)$正反是一样的,那么再减去$1$.

如何求$\phi(y)$呢?我们可以用线性筛法稍微改动一下.具体的看我程序.

剩下的也不难想到了.我们前缀和了$\phi(y)$,那么对于每个素数的计算就变成$O(1)$了.

#include <cstdio>
int N,i,j,k,phi[10000001],primes[700000],pr;
long long phipref[10000001],res;
int np[10000001];
void genPhi(int n){
phipref[1]=phi[1]=1;
for(i=2;i<=n;++i){
if(!np[i]){
phi[i]=i-1;
np[i]=primes[pr++]=i;
}
for(j=0;j<pr && (k=primes[j]*i)<=n;++j){
np[k]=primes[j];
if(np[i]==primes[j]){
phi[k]=phi[i]*primes[j];
break;
}else{
phi[k]=phi[i]*(primes[j]-1);
}
}
phipref[i]=phipref[i-1]+phi[i];
}
}
int main(){
scanf("%d",&N);
genPhi(N);
for(i=0;i<pr;++i) res+=phipref[N/primes[i]]*2-1;
printf("%lld\n",res);
return 0;
}

* 类似题目:BZOJ 2190 < 这道题我不清楚原做法是怎么样的0.0,数据范围开小了太多.

BZOJ 2818的更多相关文章

  1. bzoj 2818 GCD 数论 欧拉函数

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

  2. BZOJ 2818: Gcd [欧拉函数 质数 线性筛]【学习笔记】

    2818: Gcd Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 4436  Solved: 1957[Submit][Status][Discuss ...

  3. BZOJ 2818: Gcd

    2818: Gcd Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 4443  Solved: 1960[Submit][Status][Discuss ...

  4. bzoj 2818: Gcd GCD(a,b) = 素数

    2818: Gcd Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1566  Solved: 691[Submit][Status] Descript ...

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

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

  6. bzoj 2818: Gcd 歐拉函數

    2818: Gcd Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1633  Solved: 724[Submit][Status] Descript ...

  7. Bzoj 2818: Gcd 莫比乌斯,分块,欧拉函数,线性筛

    2818: Gcd Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 3241  Solved: 1437[Submit][Status][Discuss ...

  8. BZOJ 2818 Gcd(欧拉函数+质数筛选)

    2818: Gcd Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 9108  Solved: 4066 [Submit][Status][Discu ...

  9. BZOJ 2818 GCD 素数筛+欧拉函数+前缀和

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2818 题意:给定整数N,求1<=x,y<=n且Gcd(x,y)为素数的数对( ...

随机推荐

  1. HTML5——行走日记

    效果展示: 代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:/ ...

  2. Go语言开发环境搭建

    1.Go的安装 (1)下载go安装程序 下载地址:https://golang.org/dl/ (墙内下载地址http://www.golangtc.com/download),如果是您的系统是win ...

  3. WPF--调用线程必须为 STA,因为许多 UI 组件都需要(转载)

    自VS2005开始,UI元素在不同线程中访问就受到限制了,当然你也可以解除这种限制 以下提供Framework3.0的解决方案发: public partial class Window1 : Win ...

  4. JS实现Ajax,Josn数据的序列化和反序列化---例: 省市区联动(包含get,post)

    服务器端相应JOSN数据   用到序列化和反序列化----命名空间using System.Web.Script.Serialization; public void ProcessRequest(H ...

  5. UVA5874 Social Holidaying 二分匹配

    二分匹配简单题,看懂题意,建图比较重要. #include<stdio.h> #include<string.h> #define maxn 1100 int map[maxn ...

  6. Java算法-归并排序

    归并排序采用的是递归来实现,属于“分而治之”,将目标数组从中间一分为二,之后分别对这两个数组进行排序,排序完毕之后再将排好序的两个数组“归并”到一起,归并排序最重要的也就是这个“归并”的过程,归并的过 ...

  7. selenium ide 录制回放link链接报错

    回放是出现以下错误: 也就是回放点击打开新的链接时出现这个错误, 这个问题说的是 点击此链接会新打开一个窗口 selenium1是不支持多窗口切换的 因此会卡在这里,也就录制不支持这个操作,但是很多书 ...

  8. Android中实现自定义的拍照应用

    可以参考:http://www.android-doc.com/guide/topics/media/camera.html 一.添加相应的权限 <uses-permission android ...

  9. linux 问答

    问:1 如何查看当前的Linux服务器的运行级别? 答: ‘who -r’ 和 ‘runlevel’ 命令可以用来查看当前的Linux服务器的运行级别. 问:2 如何查看Linux的默认网关? 答: ...

  10. 浅谈Logistic回归及过拟合

    判断学习速率是否合适?每步都下降即可.这篇先不整理吧... 这节学习的是逻辑回归(Logistic Regression),也算进入了比较正统的机器学习算法.啥叫正统呢?我概念里面机器学习算法一般是这 ...