Hdu 4497 GCD and LCM(数论)

题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4497

思路:x%G==0,y%G==0,z%G==0,所以L%G==0,若L%G!=0则一定无解。

考虑

L/G=(p1^t1)*(p2^t2)*......*(pn^tn)

x‘=x/G=(p1^a1)*(p2^a2)*......*(pn^an)

y‘=y/G=(p1^b1)*(p2^b2)*......*(pn^bn)

z‘=z/G=(p1^c1)*(p2^c2)*.......*(pn^cn)

对于pi一定有max(ai,bi,ci)==ti,min(ai,bi,ci)==0,否则最大公约数pi^min(ai,bi,ci)*g>g 。

则对于每个pi有

0 0 ti 三种 ti ti ti 三种 0 ti 1--(ti-1) (ti-1)*6种,所以共有6*ti种。

#include<cstdio>
#include<vector>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=1e6+50;
int v[maxn];
vector<int> prime;
void prepare()
{
    for(int i=2; i<maxn; i++)
    {
        if(!v[i])
        {
            prime.push_back(i);
            for(int j=2*i; j<maxn; j+=i) v[j]=1;
        }
    }
    /*for(int i=0;i<prime.size();i++)
        cout<<i<<" "<<prime[i]<<endl;*/
}
int main()
{
    int t;
    prepare();
    scanf("%d",&t);
    while(t--)
    {
        int L,G,ans=1,tot;
        scanf("%d%d",&G,&L);
        if(L%G)
        {
            printf("0\n");
            continue;
        }
        int tmp=L/G;
        for(int i=0; i<prime.size(); i++)
            if(tmp%prime[i]==0)
            {
                tot=0;
                while(tmp%prime[i]==0)
                {
                    tot++;
                    tmp/=prime[i];
                }
                ans*=6*tot;
            }
        if(tmp>1)ans*=6*tot;
        printf("%d\n",ans);
    }
    return 0;
}

时间: 2024-10-02 16:41:00

Hdu 4497 GCD and LCM(数论)的相关文章

hdu 4497 GCD and LCM 数论 素数分解

GCD and LCM Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) Total Submission(s): 1339    Accepted Submission(s): 607 Problem Description Given two positive integers G and L, could you tell me how many solutions of

hdu 4497 GCD and LCM(排列组合)

题目:hdu 4497 GCD and LCM 题目大意:给出三个数的最大公约数,和最小公倍数,问这三个数的排列组合关系. 解题思路:最小公倍数/最大公约数 ==  三个数不同部分的乘积.这样来考虑的话,三个数都要有最大公约数的部分,其余的部分就是由LCM / GCD 里面的因子构成.这里面的因子可能会有 2 2 3 这样的情况, 不同的因子之间是不会相互干扰的,但是相同的会出现问题,因为,不能同时将相同的因子都放在三个位置上,这样最大公约数就的要乘上这个因子.然后对于单种因子来考虑的话,每种因

hdu 4497 GCD and LCM 数学

GCD and LCM Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4497 Description Given two positive integers G and L, could you tell me how many solutions of (x, y, z) there are, satisfying that gcd(x, y, z) = G and

hdu 4497 GCD and LCM

GCD and LCM Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total Submission(s): 1092    Accepted Submission(s): 512 Problem Description Given two positive integers G and L, could you tell me how many solutions of (

hdu 4497 GCD and LCM(唯一分解+容斥原理)

GCD and LCM Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) Total Submission(s): 78 Accepted Submission(s): 43 Problem Description Given two positive integers G and L, could you tell me how many solutions of (x, y, z)

HDU 4497 GCD and LCM(分解质因子+排列组合)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4497 题意:已知GCD(x, y, z) = G,LCM(x, y, z) = L.告诉你G.L,求满足要求的(x, y, z)有多少组,并且要考虑顺序. 思路:如果L%G != 0显然不存在这样的(x, y, z),相反肯定存在.具体做法就是将L/G分解质因子,得到:L/G = P1^t1 * P2^t2 * ... * Pk^tk,我们来考虑任意一个因子Pi^ti,此时(x/G, y/G, z/

HDU 4497 GCD and LCM (分解质因数)

链接 : ?? http://acm.hdu.edu.cn/showproblem.php?pid=4497 假设G不是L的约数 就不可能找到三个数. L的全部素因子一定包括G的全部素因子 而且次方数一定大于等于G的.仅仅须要三个数 对于每个素因子的次方数 三个的最小值是G的,最大值是L的.考虑三个相应的次方数都不一样.那么当中两个是确定的 一个是G的一个是L的 剩下的一个在G和L的之间. 算上排列 总共同拥有6种.或者当中两个是一样的,那么也有6种情况. 最后能够合并计算. //#pragma

HDU 4497 GCD and LCM (数学,质数分解)

题意:给定G,L,分别是三个数最大公因数和最小公倍数,问你能找出多少对. 析:数学题,当时就想错了,就没找出规律,思路是这样的. 首先G和L有公因数,就是G,所以就可以用L除以G,然后只要找从1-(n=L/G),即可,那么可以进行质因数分解,假设: n = p1^t1*p2^t2*p3^t3;那么x, y, z,除以G后一定是这样的. x = p1^i1*p2^i2*p3^i3; y = p1^j1*p2^j2*p3^j3; z = p1^k1*p2^k2*p3^k3; 那么我们可以知道,i1,

hdu 4497 GCD and LCM 质因素分解+排列组合or容斥原理

//昨天把一个i写成1了 然后挂了一下午 首先进行质因数分解g=a1^b1+a2^b2...... l=a1^b1'+a2^b2'.......,然后判断两种不可行情况:1,g的分解式中有l的分解式中没有的质因子 2,存在bi>bi',然后剩下的都是可行解,对于每一个质因子三个数中有两个分别bi,bi',第三个的取值可为[bi,bi'],所以对于每一个质因子共有6(bi-bi')种取法(A(2,3)*(b-a+1)+C(2,3)*2分别为取得值在和不在边界上的情况,特殊:如果bi=bi'就只有一