bzoj2818: Gcd 莫比乌斯繁衍
题意:
给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的
数对(x,y)有多少对.
n<=1e7
题解:两种做法,第一直接推式子。得f[n] = Σd(d是质数)Σd2 (d2 *d <= n)mu(d2)(n/d*d2)^2
第二是枚举每个素数,然后每个素数p对于答案的贡献就是(1 ~ n / p) 中有序互质对的个数
而求1~m中有序互质对x,y的个数,可以令y >= x, 当y = x时,有且只有y = x = 1互质,当y > x时,确定y以后符合条件的个数x就是phiy
所以有序互质对的个数为(1 ~ n/p)的欧拉函数之和乘2减1(要求的是有序互质对,乘2以后减去(1, 1)多算的一次)
那么就只需要先筛出欧拉函数再求个前缀和就可以了(from hzwer)
关键:题目很简单但是思想很有用。我们可以枚举每个数贡献来解决莫比乌斯繁衍的问题
为什么第一种做法代码更快?。。。QAQ
第一种:
#include<bits/stdc++.h>
using namespace std;
#define maxn 10000020typedef long long ll;
bool tag[maxn];
int prime[maxn],cnt,n,mu[maxn];
ll ans;void init(){mu[1] = 1;for (register int i = 2 ; i <= n ; i++){if ( !tag[i] ) prime[++cnt] = i , mu[i] = -1;for (register int j = 1 ; j <= cnt && prime[j] * i <= n ; j++){tag[i * prime[j]] = 1;if ( (i % prime[j]) == 0 ){ mu[i * prime[j]] = 0; break; }mu[i * prime[j]] = mu[i] * (-1);}} for (register int i = 1 ; i <= n ; i++) mu[i] += mu[i - 1];
}
ll getans(int n){register ll cur = 0;for (register int i = 1 ; i <= n ; ){int next = n / (n / i);cur += (ll)(mu[next] - mu[i - 1]) * (n / i) * (n / i);i = next + 1;}return cur;
}
int main(){scanf("%d",&n);init();for (int i = 1 ; i <= cnt ; i++) ans += getans(n / prime[i]); cout<<ans<<endl;return 0;
}
第二种:
#include<bits/stdc++.h>
using namespace std;
#define maxn 10000020typedef long long ll;
bool tag[maxn];
int prime[maxn / 10],cnt,n;
ll phi[maxn];
ll ans;void init(){phi[1] = 1;for (register int i = 2 ; i <= n ; i++){if ( !tag[i] ) prime[++cnt] = i , phi[i] = i - 1;for (register int j = 1 ; j <= cnt && prime[j] * i <= n ; j++){tag[i * prime[j]] = 1;if ( (i % prime[j]) == 0 ){ phi[i * prime[j]] = phi[i] * prime[j]; break; }phi[i * prime[j]] = phi[i] * (prime[j] - 1);}} for (register int i = 1 ; i <= n ; i++) phi[i] += phi[i - 1];
}int main(){scanf("%d",&n);init();for (register int i = 1 ; i <= cnt ; i++) ans += phi[n / prime[i]] * 2 - 1;cout<<ans<<endl;return 0;
}
bzoj2818: Gcd 莫比乌斯繁衍相关推荐
- BZOJ 2820 YY的GCD 莫比乌斯反演
题意:链接 方法:莫比乌斯反演 解析: 这题跟上一篇博客有一点差别,当然我们能够考虑枚举素数这个大暴力.只是当你A掉这道题后发现正解?都将近5s时.就放弃了这个念头. 相同的式子我们能够直接搬过来.p ...
- BZOJ 2820 YY的GCD 莫比乌斯反演
2820: YY的GCD Description 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y) ...
- 【bzoj2820】YY的GCD 莫比乌斯反演
题目描述 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对kAc这种 傻×必然不会了,于是 ...
- HYSBZ - 2818 Gcd —— 莫比乌斯反演
2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MB Submit: 8172 Solved: 3609 Description 给定整数N,求1&l ...
- bzoj 2820 YY的GCD - 莫比乌斯反演 - 线性筛
Description 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对kAc这种 傻×必 ...
- 洛谷P2257 YY的GCD 莫比乌斯函数反演+线性筛
洛谷P2257 YY的GCD 标签 莫比乌斯反演 线性筛 前言 这题貌似和莫反没多大关系,就是用到了一个莫比乌斯函数的性质了,其他就是推公式,优化和式. 我的第一道懵逼反演-真的好难好难-而且套路特别 ...
- [Luogu P2257] YY的GCD (莫比乌斯函数)
题面 传送门:洛咕 Solution 推到自闭,我好菜啊 显然,这题让我们求: \(\large \sum_{i=1}^{n}\sum_{j=1}^{m}[gcd(i,j)\in prime]\) 根 ...
- YY的GCD 莫比乌斯反演
---题面--- 题解: $ans = \sum_{x = 1}^{n}\sum_{y = 1}^{m}\sum_{i = 1}^{k}[gcd(x, y) == p_{i}]$其中k为质数个数 $$ ...
- [洛谷P2257] YY的GCD (莫比乌斯反演)
YY的GCD 题目描述 神犇YY虐完数论后给傻×kAc出了一题 给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对 kAc这种傻× ...
最新文章
- WPF:如何为程序添加splashScreen(初始屏幕)
- Python学习笔记:Day15 部署Web App
- Chrome开发者工具Element style里的Computed标签页
- cat 几行_迷风花说Cat!Cat因为林教练是好教练回去现实却给了一巴掌
- Big Sur恢复Catalina ? macOS Big Sur降级的三种方法 !
- 关于VC9和VC6以及Thread Safe和Non Thread Safe版本选择的问题
- 判断回文(0315)SWUST-OJ
- [20180604]在内存修改数据(bbed).txt
- 钉钉企业内部H5微应用开发
- Javaweb实现简易的留言板项目
- WPS Office 2005的评议
- win10打开凭据管理器提示0x800706BA
- 下一代降维打击黑科技现身中国
- Java面向对象基础练习
- 【问题解决】Because witness class org.springframework.cache.interceptor.DefaultKeyGenerator is not existed
- spm使用之三spm应用实例
- Alpha多样性之箱线图解读
- 新手解决Connections could not be acquired from the underlying database!Java代码上传到服务器连接不上数据库
- H.264笔记(接上节)
- 【转】CultureInfo中重要的InvariantCulture