GCD and LCM HDU - 4497(素数打表+唯一分解定理)求多少种情况
题目大意: 给你两个数最小公倍数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(素数打表+唯一分解定理)求多少种情况相关推荐
- SQL Server 使用DELETE 语句删除表中的记录两种情况(删除符合条件的记录,删除所有记录)
1 使用详解 DELETE 语句 说明:用于删除表中的记录. 语法: DELETE FROM table_name [WHERE some_column operator some_value]; 2 ...
- How many ways HDU - 1978(记忆化搜索关于求多少种方式模板)
题目: 这是一个简单的生存游戏,你控制一个机器人从一个棋盘的起始点(1,1)走到棋盘的终点(n,m).游戏的规则描述如下: 1.机器人一开始在棋盘的起始点并有起始点所标有的能量. 2.机器人只能向右或 ...
- Aladdin and the Flying Carpet (素数打表+正整数的唯一分解定理,找因数对)
题目大意:给两个数a,b,求满足c*d==a且c>=b且d>=b的c,d二元组对数,(c,d)和(d,c)属于同一种情况 题目分析:根据唯一分解定理先将a唯一分解,则a的所有正约数的个数为 ...
- 数论(一)——素数,GCD,LCM
这是一个数论系列:) 一.素数 ×费马小定理 Theorem: 设 p 是一个素数,a 是一个整数且不是 p 的倍数,那么 很遗憾,费马小定理的逆定理是不成立的.对 a = 2,满足的非素数 n 是存 ...
- 【HDU/POJ/ZOJ】Calling Extraterrestrial Intelligence Again (素数打表模板)
http://poj.org/problem?id=1411 POJ http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=168 ...
- 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 ...
- hdu-4497 GCD and LCM
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4497 题目大意: 给出三个数的gcd和lcm,求出这三个数有多少种可能性 解题思路: 设lcm / ...
- 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应该 ...
- 浅析欧几里德算法 GCD和LCM
前言 欧几里德算法作为有着非常简短的实现的算法,可能很多初学者(包括当时的我)都不求甚解.本文给出了GCD.LCM的性质,以及欧几里德算法的实现.证明和时间复杂度推导. 这里是我的个人网站: http ...
最新文章
- P1541 乌龟棋 题解(洛谷,动态规划递推)
- c 实现 php 数组,C语言实现数组功能
- mysql 命令行访问_Mysql 命令行模式访问操作mysql数据库操作
- Android 实现TextView后面跟随一个高度和宽度固定的ImageView
- c# ioc 单例模式_Spring-IOC
- 今天闲来无事给我这老伙计A4L换个机油
- Serverless 在大规模数据处理中的实践
- 技术MBA高科技企业的“宠儿”
- 3dmax2017卸载/安装失败/如何彻底卸载清除干净3dmax2017注册表和文件的方法
- Android之制作Nine-Patch图片
- html多重阴影,CSS3多重阴影特效
- linux media v4l2,Overview of the V4L2 driver framework (v4l2_subdev)
- c#语言定义文档pdf,C#如何更改Word的语言设置.pdf
- python-半省略号、三个点、点点点、...符号的用法小结
- [PTA]实验11-2-7 统计专业人数
- JS数组 编程练习 使用Javascript语言,把以下数组 在页面显示如下图所示的图案
- 判断身份证号码的正确性源码
- 我想找份好工作之“避免入黑坑公司宝典”
- Python编程练习题目汇总
- 2021全国大学生数学建模竞赛B题思路
热门文章
- Android之TabLayout+ViewPager2+FragmentStateAdapter实现带数字变化的TAB选项
- Java之ThreadLocal
- C和指针之字符串之实现strcpy函数
- 一、iVX简介(IVX 快速开发教程)
- qqp2011java_腾讯开放平台中实现QQ登陆的功能
- 一秒点击屏幕次数测试_安卓App性能专项测试流畅度深度解析
- 有趣又有用的皮托定理!
- 他读博期间连发3篇Science,28岁任武大教授后再发Nature!
- 当代大学查寝奇葩操作大赏 | 今日最佳
- java打印三角形_java基础打印三角形