zoukankan      html  css  js  c++  java
  • hdu4497 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) there are, satisfying that gcd(x, y, z) = G and lcm(x, y, z) = L?
    Note, gcd(x, y, z) means the greatest common divisor of x, y and z, while lcm(x, y, z) means the least common multiple of x, y and z.
    Note 2, (1, 2, 3) and (1, 3, 2) are two different solutions.
     
    Input
    First line comes an integer T (T <= 12), telling the number of test cases.
    The next T lines, each contains two positive 32-bit signed integers, G and L.
    It’s guaranteed that each answer will fit in a 32-bit signed integer.
     
    Output
    For each test case, print one line with the number of solutions satisfying the conditions above.
     
    Sample Input
    2 6 72 7 33
     
    Sample Output
    72 0
     
    Source
     
    Recommend
    liuyiding
    很明显,m/n!=0的话,就直接输出0就可以了!否刚,直接分解质因数m/n,找到,每个质因子的个数,这样,我们,就可以得出每个质因数为a1^k1,那是题目就是要把这k1个a1分到三个数中,那么排列组合就是k1*A(3,2),也就是,6*k1,种,直接算出来就行了!
    #include <iostream>
    #include <stdio.h>
    #include <algorithm>
    #include <string.h>
    #include <math.h>
    using namespace std;
    #define MAXN 100000
    int num[MAXN];
    int main()
    {
        int tcase,n,m,i,ans,sum,tempm;
        scanf("%d",&tcase);
        while(tcase--)
        {
            scanf("%d%d",&n,&m);
            memset(num,0,sizeof(num));
            if(m%n!=0)
            {
                printf("0
    ");
                continue;
            }
            m=m/n;tempm=sqrt(m)+1;
            for(i=2,ans=0;i<=tempm;i++)
            {
                if(m%i==0)
                {
                    while(m%i==0)
                    {
                        num[ans]++;m/=i;
                    }
                    ans++;
                }
            }
            if(m!=1)
                num[ans++]=1;
            for(sum=1,i=0;i<ans;i++)
                sum*=6*num[i];
            printf("%d
    ",sum);
        }
        return 0;
    }
    

  • 相关阅读:
    用GDB调试程序(一)
    ZOJ Problem Set
    android 去除标题
    【hadoop之翊】——基于CentOS的hadoop2.4.0伪分布安装配置
    layoutSubviews总结
    用数据说话,外贸产品选择(中篇)-google趋势分析法
    Apache介绍
    浅谈android4.0开发之GridLayout布局
    Android GridView 分页加载数据
    Android TableLayout中的使用说明
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3281553.html
Copyright © 2011-2022 走看看