BZOJ 2820 YY的GCD (莫比乌斯反演)
来源:互联网 发布:水滴筹靠谱吗 知乎 编辑:程序博客网 时间:2024/05/16 07:52
题目链接:
BZOJ 2820 权限题
Description
神犇YY虐完数论后给傻×kAc出了一题。给定
多组输入
Input
第一行一个整数T 表述数据组数
接下来T行,每行两个正整数,表示N, M
Output
T行,每行一个整数表示第i组数据的结果
Sample Input
2
10 10
100 100
Sample Output
30
2791
HINT
T = 10000
N, M <= 10000000
题解:
莫比乌斯反演。
设
代码:
#include<cstdio>#include<iostream>using namespace std;typedef long long ll;const int N=1e7+5;int T,n,m,tot,mu[N],g[N],sum[N],prime[N/3];bool check[N];void mobius(){ mu[1]=1;n=1e7+2; for(int i=2;i<=n;i++) { if(!check[i]){ prime[++tot]=i; mu[i]=-1; } for(int j=1;j<=tot&&i*prime[j]<=n;j++) { check[i*prime[j]]=1; if(!(i%prime[j])) { mu[i*prime[j]]=0; break; } else { mu[i*prime[j]]=-mu[i]; } } } for(int i=1;i<tot;i++) { for(int j=1;j*prime[i]<=n;j++) { sum[j*prime[i]] += mu[j]; } } for(int i=1;i<=n;i++) sum[i] += sum[i-1];}ll calc(int n,int m){ if(n>m) swap(n,m); ll ans=0;int pos=0; for(int i=1;i<=n;i=pos+1) { pos=min(n/(n/i),m/(m/i)); ans+=(ll)(n/i)*(m/i)*(sum[pos]-sum[i-1]); } return ans;}int main(){ mobius(); scanf("%d",&T); while(T--){ scanf("%d%d",&n,&m); printf("%lld\n",calc(n,m)); } return 0;}
阅读全文
1 0
- BZOJ 2820 YY的GCD 莫比乌斯反演
- 【莫比乌斯反演】[BZOJ 2820 YY的GCD]
- BZOJ 2820 YY的GCD 莫比乌斯反演
- [莫比乌斯反演] BZOJ 2820 YY的GCD
- BZOJ 2820 YY的GCD(莫比乌斯反演)
- bzoj 2820: YY的GCD 莫比乌斯反演
- BZOJ 2820 YY的GCD 莫比乌斯反演
- 【BZOJ 2820】YY的GCD 莫比乌斯反演
- BZOJ 2820 YY的GCD 莫比乌斯反演
- [BZOJ 2820]YY的GCD:莫比乌斯反演
- BZOJ 2820 YY的GCD(莫比乌斯反演)
- BZOJ 2820 YY的GCD (莫比乌斯反演)
- bzoj 2820: YY的GCD(莫比乌斯反演)
- Bzoj 2820: YY的GCD(莫比乌斯反演+除法分块)
- 2820: YY的GCD|莫比乌斯反演
- 2820: YY的GCD 莫比乌斯反演
- [BZOJ2820]YY的GCD(莫比乌斯反演)
- bzoj 2820 YY的GCD(莫比乌斯)
- [nginx]nginx 信号量
- JavaBean的使用
- 值传递和引用传递
- 字符编码之ASCII码、Unicode、UTF-8的关系和区别
- centos6.8 静默安装 oracle 11.2.0.4
- BZOJ 2820 YY的GCD (莫比乌斯反演)
- HtmlAgilityPack HtmlWeb.Load() 不支持 gzip 的解决方法
- TensorFlow基础知识4-变量
- Go语言学习笔记 --- 运算符
- dup和dup2
- VPN
- 定语和宾语补足语的区别(2)
- JAVA常用String操作
- DER、CRT、CER、PEM格式的证书及转换