hdu 2841 Visible Trees (容斥原理)
2015-03-23 16:33
489 查看
给出一个矩阵问在点(0,0)的人最多能看得到多少点。发现规律:对于这些点的坐标,只要坐标互质就可以看到。那么就转化为求区间(1,n)和(1,m)是互质的数对的对数。容斥原理。
#include<iostream> #include<math.h> #include<stdio.h> #include<algorithm> #include<string.h> #include<string> #include<vector> #include<queue> #include<map> #include<set> using namespace std; #define B(x) (1<<(x)) void cmax(int& a,int b){ if(b>a)a=b; } void cmin(int& a,int b){ if(b<a)a=b; } typedef long long ll; const int oo=0x3f3f3f3f; const ll OO=1LL<<61; const int MOD=1000007; const int maxn=100005; int p[maxn][15],f[maxn]; int num[maxn]; void Init(){ for(int i=2;i<maxn;i++){ if(f[i])continue; for(int j=i;j<maxn;j+=i){ f[j]=1; p[j][num[j]++]=i; } } } ll dfs(int s,int x,int a){ ll res=0; for(int i=s;i<num[a];i++){ res+=x/p[a][i]-dfs(i+1,x/p[a][i],a); } return res; } int main(){ //freopen("E:\\read.txt","r",stdin); int n,m,T; ll ans; Init(); scanf("%d",&T); while(T--){ scanf("%d %d",&n,&m); ans=0; for(int i=1;i<=m;i++){ ans+=n-dfs(0,n,i); } printf("%I64d\n",ans); } return 0; }
相关文章推荐
- HDU 2841 Visible Trees 解题报告(筛 or 容斥原理)
- HDU 2841 Visible Trees(容斥原理)
- hdu 4135 Co-prime +hdu 2841 Visible Trees(容斥原理)
- hdu 2841 Visible Trees(容斥原理)
- hdu 2841 Visible Trees 容斥原理
- [思维+容斥原理] hdu 2841 Visible Trees
- 【HDU 2841】Visible Trees(容斥原理-好题)
- HDU 2841-Visible Trees(容斥原理)
- HDU 2841 Visible Trees(容斥原理,数论)
- HDU 2841 Visible Trees (数论,容斥原理)
- HDU 2841 Visible Trees (素因子分解,容斥原理)
- HDU 2841 Visible Trees 数论+容斥原理
- HDU 2841 Visible Trees 数论+容斥原理
- HDU 2841 Visible Trees - 莫比乌斯 /容斥原理
- HDU 2841 Visible Trees (容斥原理好题)
- hdu 2841 Visible Trees (容斥原理)
- [HDU 2841]Visible Trees:容斥原理
- hdu 2841 Visible Trees(容斥原理)
- hdu 2841 Visible Trees【容斥原理】
- hdu 2841 Visible Trees(容斥原理)