【BZOJ3994】【SDOI2015】约数个数和(莫比乌斯反演)
来源:互联网 发布:梅西和c罗谁厉害 知乎 编辑:程序博客网 时间:2024/05/16 14:20
Description
设d(x)为x的约数个数,给定N、M,求
Input
输入文件包含多组测试数据。
第一行,一个整数T,表示测试数据的组数。
接下来的T行,每行两个整数N、M。
Output
T行,每行一个整数,表示你所求的答案。
Sample Input
2
7 4
5 6
Sample Output
110
121
HINT
1<=N, M<=50000
1<=T<=50000
题解:
写的第一道莫比乌斯反演,发现证明繁复,比代码都长……
证明和代码都参考了PoPoQQQ大神。
#include<iostream>#include<stdio.h>#include<string.h>using namespace std;#define ll long long#define N 50005int f[N],mu[N],prim[N],n,m,tot; bool vis[N];int cal(int x){ int ret=0,last=0; for(int i=1;i<=x;i=last+1) { last=min(x,x/(x/i)); ret+=(x/i)*(last-i+1); } return ret;}void pre(){ mu[1]=1; for(int i=2;i<=50000;i++) { if (!vis[i]) { prim[++tot]=i; mu[i]=-1; } for(int j=1;j<=tot && prim[j]*i<=50000;j++) { vis[i*prim[j]]=1; if(!(i%prim[j])) { mu[i*prim[j]]=0; break; } mu[i*prim[j]]=-mu[i]; } } for(int i=1;i<=50000;i++) { mu[i]+=mu[i-1]; f[i]=cal(i); }}ll work(){ if(n>m) swap(n,m); ll ret=0; int last=0; for(int i=1;i<=n;i=last+1) { last=min(n,min(n/(n/i),m/(m/i))); ret+=(ll)(mu[last]-mu[i-1])*((ll)f[n/i]*f[m/i]); } return ret;}int t;int main(){ pre(); scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); printf("%lld\n",work()); } return 0;}
0 0
- 【bzoj3994】[SDOI2015]约数个数和 莫比乌斯反演
- [BZOJ3994][SDOI2015]约数个数和(莫比乌斯反演)
- 【BZOJ3994】【SDOI2015】约数个数和(莫比乌斯反演)
- [BZOJ3994][SDOI2015]约数个数和(莫比乌斯反演)
- [BZOJ3994][SDOI2015]约数个数和(莫比乌斯反演)
- 【bzoj3994】[SDOI2015]约数个数和 线性筛法+莫比乌斯反演+数论分块
- 【莫比乌斯反演】[BZOJ3994]约数个数和
- bzoj3994 约数个数和 数论&莫比乌斯反演
- 约数个数和(数论,莫比乌斯反演)BZOJ3994
- Sdoi2015约数个数和题解莫比乌斯反演
- 3994: [SDOI2015]约数个数和 莫比乌斯反演
- 【bzoj3994】【SDOI2015】约数个数和【数论】【反演】
- [莫比乌斯反演 约数个数] BZOJ 3994 [SDOI2015]约数个数和
- 洛谷P3327:[SDOI2015]约数个数和 (莫比乌斯反演)
- [BZOJ3994][SDOI2015]约数个数和(数论)
- 【SDOI2015】【BZOJ3994】约数个数和
- [BZOJ3994][SDOI2015]约数个数和
- BZOJ3994: [SDOI2015]约数个数和
- 代码模板:python-基础-1(常识)
- 论MySQL的入门
- [bzoj3072]Two Cakes
- L3-003. 社交集群
- 缓冲输入输出字符流(实现用户登录注册)
- 【BZOJ3994】【SDOI2015】约数个数和(莫比乌斯反演)
- 设计模式学习--迭代器模式
- 信号终端处理
- nginx反向代理用做内网域名转发
- 题目标题: 第39级台阶
- bzoj3891
- How tomcat works——16 关闭钩子
- Hibernate原生SQL查询
- 解决sublime text3显示中文小框框和运行浏览器时中文出现乱码。