zoukankan      html  css  js  c++  java
  • bzoj1101【POI007】Zap

    1101: [POI2007]Zap

    Time Limit: 10 Sec  Memory Limit: 162 MB
    Submit: 1950  Solved: 735
    [Submit][Status][Discuss]

    Description

    FGD正在破解一段password。他须要回答非常多类似的问题:对于给定的整数a,b和d,有多少正整数对x,y。满足x<=a,y<=b,而且gcd(x,y)=d。作为FGD的同学,FGD希望得到你的帮助。

    Input

    第一行包括一个正整数n,表示一共同拥有n组询问。(1<=n<= 50000)接下来n行。每行表示一个询问。每行三个正整数,分别为a,b,d。(1<=d<=a,b<=50000)

    Output

    对于每组询问,输出到输出文件zap.out一个正整数,表示满足条件的整数对数。

    Sample Input

    2
    4 5 2
    6 4 3

    Sample Output

    3
    2

    HINT

    对于第一组询问。满足条件的整数对有(2,2),(2,4)。(4,2)。对于第二组询问,满足条件的整数对有(6,3),(3,3)。




    莫比乌斯反演。bzoj2301简化版(双倍经验拿走)。




    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #define F(i,j,n) for(int i=j;i<=n;i++)
    #define D(i,j,n) for(int i=j;i>=n;i--)
    #define ll long long
    #define maxn 50005
    using namespace std;
    int t,a,b,k,tot;
    int mu[maxn],sum[maxn],pri[maxn];
    bool mark[maxn];
    inline int read()
    {
    	int x=0,f=1;char ch=getchar();
    	while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
    	while (ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    	return x*f;
    }
    inline void getmu()
    {
    	mu[1]=1;
    	F(i,2,50000)
    	{
    		if (!mark[i]){mu[i]=-1;pri[++tot]=i;}
    		for(int j=1;j<=tot&&pri[j]*i<=50000;j++)
    		{
    			mark[i*pri[j]]=true;
    			if (i%pri[j]==0){mu[i*pri[j]]=0;break;}
    			else mu[i*pri[j]]=-mu[i];
    		}
    	}
    	F(i,1,50000) sum[i]=sum[i-1]+mu[i];
    }
    inline int calc(int n,int m)
    {
    	if (n>m) swap(n,m);
    	int ans=0,pos;
    	for(int i=1;i<=n;i=pos+1)
    	{
    		pos=min(n/(n/i),m/(m/i));
    		ans+=(sum[pos]-sum[i-1])*(n/i)*(m/i);
    	}
    	return ans;
    }
    int main()
    {
    	getmu();
    	t=read();
    	while (t--)
    	{
    		a=read();b=read();k=read();
    		printf("%d
    ",calc(a/k,b/k));
    	}
    	return 0;
    }
    


  • 相关阅读:
    总有段迷惑的人生
    codepage的重要性【转】
    开通博客
    js 正则常用方法
    关于小程序scrollview组件添加enableflex后布局失效的解决方案
    关于小程序使用async/await报错regeneratorRuntime is not defined的解决方案
    IE6中,一个Button同时打开两个下载窗口,并且可以自动关闭
    Create User
    Oracle: import tables use .dmp file in PL/SQL Developer
    VS在进行调试时,不能调试的原因列举如下
  • 原文地址:https://www.cnblogs.com/jzssuanfa/p/7343851.html
Copyright © 2011-2022 走看看