洛谷 P3327 [SDOI2015]约数个数和 (莫比乌斯反演)
来源:互联网 发布:网络有个感叹号怎么办 编辑:程序博客网 时间:2024/06/05 11:42
题目描述
设
输入输出格式
输入格式:
输入文件包含多组测试数据。第一行,一个整数T,表示测试数据的组数。接下来的T行,每行两个整数N、M。
输出格式:
T行,每行一个整数,表示你所求的答案。
输入输出样例
输入样例#1:
2
7 4
5 6
输出样例#1:
110
121
说明
1<=N, M<=50000
1<=T<=50000
题目分析
数论题对我这种智障来说就是要命的。这题我想了一会还是没有想出来。
某Cla口中的水题对蒟蒻我来说都是难题,所谓的好题就是我根本不会做的题。。。
本题必须用到的结论:
证明很简单:
将一个数唯一分解为
然后考虑一个质数
按照某Cla的说法,这就相当于一个
然后根据前面的规律,我们设
我们令
其实很好理解,
现在就变成求
根据数论中切换枚举次序的套路以及莫比乌斯反演对布尔条件框的替换,我们得到
原式
将
最后将约数
然后我们设
这样对于连续一段
还有一种做法,就是
代码
#include <cstdio>#include <cstdlib>#include <cstring>#include <algorithm>#include <cmath>#include <iostream>#define N 50010using namespace std;typedef long long LL;int T, n, m;LL g[N], Ans;int prime[N], miu[N], cnt;bool vis[N];void Get_miu(){ for(int i = 1; i < N; i++){ int last; for(int j = 1; j <= i; j = last+1){ last = i/(i/j); g[i] += (LL)(i/j)*(LL)(last-j+1); } } vis[1] = true; miu[1] = 1; for(int i = 2; i < N; i++){ if(!vis[i]){ prime[++cnt] = i; miu[i] = -1; } for(int j = 1; j <= cnt && i * prime[j] < N; j++){ vis[i * prime[j]] = true; if(i % prime[j] == 0){ miu[i * prime[j]] = 0; break; } else miu[i * prime[j]] = -miu[i]; } } for(int i = 1; i < N; i++) miu[i] += miu[i-1];}int main(){ Get_miu(); scanf("%d", &T); while(T --){ scanf("%d%d", &n, &m); if(n > m) swap(n, m); Ans = 0; int last; for(int i = 1; i <= n; i = last+1){ last = min(n/(n/i), m/(m/i)); Ans += (LL)(miu[last] - miu[i-1]) * g[n/i] * g[m/i]; } printf("%lld\n", Ans); } return 0;}
给所有的现充施以破坏的铁锤吧!
- 洛谷P3327:[SDOI2015]约数个数和 (莫比乌斯反演)
- 洛谷 P3327 [SDOI2015]约数个数和 (莫比乌斯反演)
- Sdoi2015约数个数和题解莫比乌斯反演
- 【bzoj3994】[SDOI2015]约数个数和 莫比乌斯反演
- 3994: [SDOI2015]约数个数和 莫比乌斯反演
- [莫比乌斯反演 约数个数] BZOJ 3994 [SDOI2015]约数个数和
- BZOJ 3994 Sdoi2015 约数个数和 莫比乌斯反演
- BZOJ 3994 [SDOI2015]约数个数和 (神定理+莫比乌斯反演)
- BZOJ 3994: [SDOI2015]约数个数和|莫比乌斯反演
- BZOJ_P3994 [SDOI2015]约数个数和(数论+莫比乌斯反演)
- 【bzoj3994】[SDOI2015]约数个数和 线性筛法+莫比乌斯反演+数论分块
- [BZOJ3994][SDOI2015]约数个数和(莫比乌斯反演)
- BZOJ 3994 [SDOI2015]约数个数和 (莫比乌斯反演)
- 【BZOJ3994】【SDOI2015】约数个数和(莫比乌斯反演)
- BZOJ 3994: [SDOI2015]约数个数和 莫比乌斯反演
- BZOJ 3994 [SDOI2015]约数个数和 莫比乌斯反演
- [BZOJ3994][SDOI2015]约数个数和(莫比乌斯反演)
- [BZOJ3994][SDOI2015]约数个数和(莫比乌斯反演)
- NodeJs——(18)express启用gzip
- 调试插件的问题-工作区间错误
- Servlet 使用介绍(1)
- 我所理解的“self.sth = sth”(关键词:self/self.name=name)
- 资料收集 FFMPEG – >TEMP
- 洛谷 P3327 [SDOI2015]约数个数和 (莫比乌斯反演)
- 人工智能算法
- C
- android-arsenal.com/free 开源Android Lib (5246)
- 《结构思考力》- 书摘整理
- Tensorflow学习之实现卷积神经网络(三)
- 2017-08-08
- linux安装多tomcat的配置方法(常见问题:Cannot find //bin/setclasspath.sh)
- Redis介绍