zoukankan      html  css  js  c++  java
  • HDU

    题意:给出三个数的gcd,lcm,求这三个数的全部的可能

    思路 :设x,y,z的gcd为d,那么设x=d*a,y=d*b,z=d*c。a,b。c肯定是互质的。那么lcm=d*a*b*c,所以我们能够得到a*b*c=lcm/gcd=ans,将ans分解因数后,那么每次都要分配每一个因数的个数,如果某个因数的个数为n,一定要有两个分配到n,0,所以是6种

    #include <iostream>
    #include <cstdio>
    #include <cstdio>
    #include <cstring>
    #include <cmath>
    using namespace std;
    
    int n,m;
    int num[1000000];
    
    int main(){
    	int t;
    	scanf("%d",&t);
    	while (t--){
    		scanf("%d%d",&n, &m);
    		if (m%n != 0){
    			printf("0
    ");
    			continue;
    		}
    		m /= n;
    		int cnt = sqrt(m+0.5);
    		int k = 0;
    		for (int i = 2; i <= cnt && m > 1; i++){
    			if (m % i == 0){
    				num[k] = 0;
    				while (m%i == 0){
    					++num[k];
    					m /= i;
    				}
    				++k;
    			}
    		}
    		if (m != 1)
    			num[k++] = 1;
    		int ans = 1;
    		for (int i = 0; i < k; i++)
    			ans = ans*num[i]*6;
    		cout << ans << endl;
    	}
    	return 0;
    }



  • 相关阅读:
    2.6
    zuoye
    练习1
    练习
    练习
    4
    3
    2
    1
    1.3
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5328149.html
Copyright © 2011-2022 走看看