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

Posted blfbuaa

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 comment(linker, "/STACK:10240000,10240000")
#include <algorithm>
#include <iostream>
#include <sstream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <vector>
#include <cmath>
#include <queue>
#include <stack>
#include <set>
#include <map>
#define mod 4294967296
#define MAX 0x3f3f3f3f
#define lson o<<1, l, m
#define rson o<<1|1, m+1, r
#define SZ(x) ((int)ans.size())
#define MAKE make_pair
#define INFL 0x3f3f3f3f3f3f3f3fLL
#define mem(a) memset(a, 0, sizeof(a))
const double pi = acos(-1.0);
const double eps = 1e-9;
const int N = 200005;
const int M = 20005;
typedef __int64 ll;
using namespace std;

ll a, b;
struct C {
    ll num, cnt;
} s[N], t[N];
int T;

int Ini(ll a, C* f) {
    int tmp = sqrt(1.0*a + 0.5), e = 0;
    for(int i = 2; i <= tmp; i++) {
        if(a % i == 0) {
            int k = 0;
            while(a % i == 0) {
                k++;
                a /= i;
            }
            f[e].num = i;
            f[e++].cnt = k;
        }
    }
    if(a != 1) {
        f[e].cnt = 1;
        f[e++].num = a;
    }
    return e;

}

int main()  {

    //freopen("in.txt","r",stdin);
    cin >> T;
    while(T--) {
        cin >> a >> b;
        if(b % a) {
            puts("0");
            continue;
        }
        mem(s);
        mem(t);
        int n = Ini(a, s);
        int m = Ini(b, t);

        ll ans = 1, x;
        int fr = 0;
        for(int i = 0; i < m; i++) {
            if(t[i].num == s[fr].num) {
                x = t[i].cnt - s[fr].cnt;
                fr++;
                if(x) ans *= x * 6;
            } else ans *= t[i].cnt * 6;

        }
        cout << ans << endl;
    }
    return 0;
}

以上是关于HDU 4497 GCD and LCM (分解质因数)的主要内容,如果未能解决你的问题,请参考以下文章

HDU 4497 GCD and LCM

HDU_3071 Gcd & Lcm game 素数分解 + 线段树 + 状压

[HDU 5382] GCD?LCM!

hdu5505-GT and numbers-(贪心+gcd+唯一分解定理)

POJ 2429 GCD &amp; LCM Inverse (大数分解)

GCD & LCM Inverse POJ 2429(Pollard Rho质因数分解)