题目大意: 给你两个数最小公倍数L,最大公约数G,问你有多少有序数组(x,y,z)满足GCD(x,y,z)=G,LCM(x,y,z)=L,首先如果gcd(x,y,z)=G,

思路分析: 当这样的组合存在的时候,求gcd(x,y,z)=1且lcm(x,y,z)=L/G的方法数是等价的。   

那么:令temp=L/G。   

对temp进行素数分解:temp=p1^t1 * p2^t2 * ……* pn^tn。   

因为temp是这三个数的倍数,因而x,y,z的组成形式为:   

x=p1^i1 * p2^i2 *…… * pn^in;   

y=p1^j1 * p2^j2 *…… * pn^jn;   

z=p1^k1 * p2^k2 * …… * pn^kn;   

对于某一个素因子p:           

因为要满足x,y,z的最大公约数为1,即三个数没有共同的素因子,所以min(i,j,k)=0。           

又因为要满足x,y,z的最小公倍数为temp,即p^t必然要至少存在一个,所以max(i,j,k)=t。           

换言之:至少要有一个p^t,以满足lcm的要求;至多有两个包含p,以满足gcd的要求。           

因而基本的组合方式为(0,p^t,p^k),k=0-->t。           

而因为(1,2,3)和(2,1,3)是不同的方法,所有满足要求的方法中,除了(0,0,t)和(0,t,t)各有3种排列之外,其余的(0,x,t)(1<=x<=t-1)有6种排列。           

对于某一个素因子p总的方法数为6*(t-1)+2*3=6*t。   在根据组合排列的知识,素数与素数之间是分步的关系,因而总的方法数为:6*t1*6*t2*6*t3*...*6*tn

题目:

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

AC代码

#include<iostream>
#include<string.h>
using namespace std;
typedef long long ll;
const int M=1e6+100;
int t,k;
ll m,n;
int book[M],dp[M];
void f()
{k=0;memset(book,0,sizeof(book));memset(dp,0,sizeof(dp));for(int i=2; i<M; i++)if(!book[i]){dp[k++]=i;for(int j=i<<1; j<M; j+=i)book[j]=1;}
}
ll dfs(ll x)
{ll ant=1;for(int i=0; dp[i]<=x&&i<k; i++)/*care 记得i<k,这个条件*/{if(x%dp[i]==0){int a=0;while(x%dp[i]==0){a++;x/=dp[i];}ant*=6*a;}}if(x>1)ant*=6;return ant;
}
int main()
{cin>>t;f();while(t--){cin>>m>>n;if(n%m!=0)cout<<"0"<<endl;else{n/=m;ll ans=dfs(n);cout<<ans<<endl;}}return 0;
}
/*题意:给你三个数x,y,z的最大公约数gcd,最小公倍数lcm . 然后求满足的x,y,z有多少种可能。
(1,3,2) 和 (1,2,3)被视为不同
思路:首先lcm%gcd == 0是必须的,否则无解。然后将tmp = lcm/gcd 进行因式分解。
假设其中有一个质因子p1的幂为e1,那么着三个数中至少有一个为p1^e1,至少有一个为1 。
如果都含有p1的话他就被分到最大公约数里面去了,不会在tmp里面*/

GCD and LCM HDU - 4497(素数打表+唯一分解定理)求多少种情况相关推荐

  1. SQL Server 使用DELETE 语句删除表中的记录两种情况(删除符合条件的记录,删除所有记录)

    1 使用详解 DELETE 语句 说明:用于删除表中的记录. 语法: DELETE FROM table_name [WHERE some_column operator some_value]; 2 ...

  2. How many ways HDU - 1978(记忆化搜索关于求多少种方式模板)

    题目: 这是一个简单的生存游戏,你控制一个机器人从一个棋盘的起始点(1,1)走到棋盘的终点(n,m).游戏的规则描述如下: 1.机器人一开始在棋盘的起始点并有起始点所标有的能量. 2.机器人只能向右或 ...

  3. Aladdin and the Flying Carpet (素数打表+正整数的唯一分解定理,找因数对)

    题目大意:给两个数a,b,求满足c*d==a且c>=b且d>=b的c,d二元组对数,(c,d)和(d,c)属于同一种情况 题目分析:根据唯一分解定理先将a唯一分解,则a的所有正约数的个数为 ...

  4. 数论(一)——素数,GCD,LCM

    这是一个数论系列:) 一.素数 ×费马小定理 Theorem: 设 p 是一个素数,a 是一个整数且不是 p 的倍数,那么 很遗憾,费马小定理的逆定理是不成立的.对 a = 2,满足的非素数 n 是存 ...

  5. 【HDU/POJ/ZOJ】Calling Extraterrestrial Intelligence Again (素数打表模板)

    http://poj.org/problem?id=1411  POJ http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=168 ...

  6. GCD and LCM Aizu - 0005(辗转相除)+GCD LCM Inverse POJ - 2429(java或【Miller Rabin素数測试】+【Pollar Rho整数分解】)

    题目:GCD and LCM Aizu - 0005 Write a program which computes the greatest common divisor (GCD) and the ...

  7. hdu-4497 GCD and LCM

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4497 题目大意: 给出三个数的gcd和lcm,求出这三个数有多少种可能性 解题思路: 设lcm / ...

  8. LightOJ-1220 Mysterious Bacteria (素数打表+欧几里得算法+唯一分解定理)给出x,求x=a^p,最大的指数

    题目大意: x = b^p, x只有一个因子的p次幂构成 如果24 = 2^3*3^1,p应该是gcd(3, 1) = 1,即24 = 24^1 324 = 3^4*2^2=(3^2*2)^2,p应该 ...

  9. 浅析欧几里德算法 GCD和LCM

    前言 欧几里德算法作为有着非常简短的实现的算法,可能很多初学者(包括当时的我)都不求甚解.本文给出了GCD.LCM的性质,以及欧几里德算法的实现.证明和时间复杂度推导. 这里是我的个人网站: http ...

最新文章

  1. P1541 乌龟棋 题解(洛谷,动态规划递推)
  2. c 实现 php 数组,C语言实现数组功能
  3. mysql 命令行访问_Mysql 命令行模式访问操作mysql数据库操作
  4. Android 实现TextView后面跟随一个高度和宽度固定的ImageView
  5. c# ioc 单例模式_Spring-IOC
  6. 今天闲来无事给我这老伙计A4L换个机油
  7. Serverless 在大规模数据处理中的实践
  8. 技术MBA高科技企业的“宠儿”
  9. 3dmax2017卸载/安装失败/如何彻底卸载清除干净3dmax2017注册表和文件的方法
  10. Android之制作Nine-Patch图片
  11. html多重阴影,CSS3多重阴影特效
  12. linux media v4l2,Overview of the V4L2 driver framework (v4l2_subdev)
  13. c#语言定义文档pdf,C#如何更改Word的语言设置.pdf
  14. python-半省略号、三个点、点点点、...符号的用法小结
  15. [PTA]实验11-2-7 统计专业人数
  16. JS数组 编程练习 使用Javascript语言,把以下数组 在页面显示如下图所示的图案
  17. 判断身份证号码的正确性源码
  18. 我想找份好工作之“避免入黑坑公司宝典”
  19. Python编程练习题目汇总
  20. 2021全国大学生数学建模竞赛B题思路

热门文章

  1. Android之TabLayout+ViewPager2+FragmentStateAdapter实现带数字变化的TAB选项
  2. Java之ThreadLocal
  3. C和指针之字符串之实现strcpy函数
  4. 一、iVX简介(IVX 快速开发教程)
  5. qqp2011java_腾讯开放平台中实现QQ登陆的功能
  6. 一秒点击屏幕次数测试_安卓App性能专项测试流畅度深度解析
  7. 有趣又有用的皮托定理!
  8. 他读博期间连发3篇Science,28岁任武大教授后再发Nature!
  9. 当代大学查寝奇葩操作大赏 | 今日最佳
  10. java打印三角形_java基础打印三角形