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

统计n以内gcd为质数的数的个数。

求 \(\sum\limits_p \sum\limits_{i=1}^{n}\sum\limits_{j=1}^{n} [gcd(i,j)==p]\)

一开始还以为要莫比乌斯反演.

推了半天不知道怎么求,遂看题解:

$\sum\limits_p \sum\limits_{i=1}{n}\sum\limits_{j=1}{n} [gcd(i,j)p] =\sum\limits_p \sum\limits_{i=1}{\frac{n}{p}}\sum\limits_{j=1}{\frac{n}{p}} [gcd(i,j)1] $

一个有序数对 \((i,j),(i>j)\) 与 \(i\) 互质的数 \(j\) 的个数也就是 \(\varphi(i)\) ,画一个正方形可以知道对调 \((i,j)\) 求出一样的结果.

但是当 $ i1&&j1 $ 时被重复计数了,要减去

那么答案就是 $\sum\limits_p (2*\sum\limits_{i=1}^{\frac{n}{p}}\varphi(i) - 1) $


#include<bits/stdc++.h>
using namespace std;
#define ll long long #define N 10000005 int phi[N],pri[N],cntpri=0;
bool notpri[N]; ll prefix[N]; void sieve_phi(int n) {
notpri[1]=phi[1]=1;
prefix[0]=0;
prefix[1]=1;
for(int i=2; i<=n; i++) {
if(!notpri[i])
pri[++cntpri]=i,phi[i]=i-1;
for(int j=1; j<=cntpri&&i*pri[j]<=n; j++) {
notpri[i*pri[j]]=1;
if(i%pri[j])
phi[i*pri[j]]=phi[i]*phi[pri[j]];
else {
phi[i*pri[j]]=phi[i]*pri[j];
break;
}
}
prefix[i]=prefix[i-1]+phi[i];
}
} ll solve(ll n){
ll ans=0;
for(int i=1;i<=cntpri;i++){
if(pri[i]<=n){
ans+=2ll*(prefix[n/pri[i]])-1ll;
}
}
return ans;
} int main() {
sieve_phi(10000000+1);
int n;
while(cin>>n) {
ll ans=solve(n);
cout<<ans<<endl;
}
}

洛谷 - P2568 - GCD - 欧拉函数的更多相关文章

  1. 洛谷P2568 GCD (欧拉函数/莫比乌斯反演)

    P2568 GCD 题目描述 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. 输入输出格式 输入格式: 一个整数N 输出格式: 答案 输入输出样例 输入 ...

  2. 洛谷 - P2158 - 仪仗队 - 欧拉函数

    https://www.luogu.org/problemnew/show/P2158 好像以前有个妹子收割铲也是欧拉函数. 因为格点直线上的点,dx与dy的gcd相同,画个图就觉得是欧拉函数.但是要 ...

  3. 洛谷P2568 GCD(线性筛法)

    题目链接:传送门 题目: 题目描述 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. 输入输出格式 输入格式: 一个整数N 输出格式: 答案 输入输出样例 ...

  4. 洛谷 P2568 GCD

    https://www.luogu.org/problemnew/show/P2568#sub 最喜欢题面简洁的题目了. 本题为求两个数的gcd是素数,那么我们将x和y拆一下, 假设p为$gcd(x, ...

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

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

  6. POJ 2773 Happy 2006【GCD/欧拉函数】

    根据欧几里德算法,gcd(a,b)=gcd(a+b*t,b) 如果a和b互质,则a+b*t和b也互质,即与a互质的数对a取模具有周期性. 所以只要求出小于n且与n互质的元素即可. #include&l ...

  7. HDU 2588 GCD (欧拉函数)

    GCD Time Limit: 1000MS   Memory Limit: 32768KB   64bit IO Format: %I64d & %I64u Submit Status De ...

  8. Bzoj-2818 Gcd 欧拉函数

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

  9. BZOJ2818: Gcd 欧拉函数求前缀和

    给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. 如果两个数的x,y最大公约数是z,那么x/z,y/z一定是互质的 然后找到所有的素数,然后用欧拉函数求一 ...

随机推荐

  1. 官网下载kettle

    首先什么是kettle,引用下百度百科 Kettle是一款国外开源的ETL工具,纯java编写,可以在Window.Linux.Unix上运行,数据抽取高效稳定. Kettle 中文名称叫水壶,该项目 ...

  2. poj 1163 The Triangle &amp;poj 3176 Cow Bowling (dp)

    id=1163">链接:poj 1163 题意:输入一个n层的三角形.第i层有i个数,求从第1层到第n层的全部路线中.权值之和最大的路线. 规定:第i层的某个数仅仅能连线走到第i+1层 ...

  3. Thread join方法的用途

    主线程中会创建多个子线程做一些事情,主线程要用到这些子线程处理的数据,因此它需要等待所有的子线程处理完之后才继续运行.这就要用到join方法了.

  4. 解决Pods Unable to find a specification for `xxxxx`问题

    错误信息为 Unable to find a specification for *RMQClient* (~> 1.x.x) depended upon by Podfile 刚开始以为这个已 ...

  5. Visitor Pattern

    1.Visitor模式:将更新(变更)封装到一个类中(访问操作),并由待更改类提供一个接收接口,则可在不破坏类的前提下,为类提供增加新的新操作. 2.Visitor模式结构图 Visitor模式的关键 ...

  6. CSU-1531 Jewelry Exhibition —— 二分图匹配(最小覆盖点)

    题目链接:https://vjudge.net/problem/CSU-1531 Input Output Sample Input 2 1 5 3 0.2 1.5 0.3 4.8 0.4 3.5 4 ...

  7. iOS:UITextField中文输入法输入时对字符长度的限制

      如题的问题,又是个让我抓狂了大半天的问题,还是做个记录,有与类似问题的同学可参考,但不一定对.具体问题还需具体分析.我遇到的需求是这样的:有一个输入框,输入框内输入文字,文字字数限制在20字.   ...

  8. VS2010关于调用ffmpeg借口出错

    win7 下开发视频服务器,用到ffmpeg,debug版本运行正常,切换到release时,出现"0x00905a4d 处未处理的异常: 0xC0000005: 读取位置 0x00905a ...

  9. PHP执行外部命令【转】

    PHP是完全支持外部命令的,但是出于安全考虑,一般很少使用. PHP提供共了3种方法调用外部命令: (1)调用执行外部命令函数(system(),exec(),passthru(),shell_exe ...

  10. js获取dom对象style样式的值

    js获取到的dom对象的style通常是没有值得,因为我们都写在外部文件中,从慕课网上见到讲师封装的一个方法,挺不错.特此记录下来. function getStyle(obj,attr){ if(o ...