GCD and LCM(质因子分解+组合数学)

HDU - 4497 GCD and LCM GCD and LCM Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) Total Submission(s): 3104    Accepted Submission(s): 1357Problem Description Given two positive intege... 阅读详情

GCD and LCM

 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
题意:

给定一个G,L,问一共有多少组(x,y,z),可以满足gcd(x,y,z) = G, lcm(x,y,z) = L

(其中(x,y,z)变换顺序算作不同的方案)

分析:

这道题我在做的时候犯了严重的错误!!(反正就是菜)

我使用了公式

lcm(x,y,z)=x⋅y⋅zgcd(x,y,z)lcm(x,y,z)=x⋅y⋅zgcd(x,y,z)

一定要注意呀,这个公式是不成立的,对于三个及以上的数这个公式是不成立的

它只对两个数求最小公倍数有效

即: lcm(x,y)=x⋅ygcd(x,y)lcm(x,y)=x⋅ygcd(x,y)


那么下面我们来看一下这道正解应该怎么做

刚才提到了,对于求最小公倍数,上面式子不成立

那么我们就要介绍一下基于算术基本定理的gcd和lcm公式(三个数及以上)

我们就以求三个数x,y,z的gcd和lcm为例:

根据算术基本定理我们得到:

x=pa11⋅pa22⋯parrx=p1a1⋅p2a2⋯prar

y=pb11⋅pb22⋯pbrry=p1b1⋅p2b2⋯prbr

y=pc11⋅pc22⋯pcrry=p1c1⋅p2c2⋯prcr

当然了他们之间也可以存在不同的质因数,我们这里为了讲题方便,故让他们拥有相同质因子,不同幂次

那么三个数的最大公因数和最小公倍数分别为:

gcd(x,y,z)=pmin(a1,b1,c1)1⋅pmin(a2,b2,c2)2⋯pmin(ar,br,cr)rgcd(x,y,z)=p1min(a1,b1,c1)⋅p2min(a2,b2,c2)⋯prmin(ar,br,cr)

其中 p1,p2.....prp1,p2.....pr是指三个数中所有不同的质因子,因此我们因为取的是最小幂次,故我们可以知道有的幂次为0(即该素因子并不同时存在于三个数中时)

lcm(x,y,z)=pmax(a1,b1,c1)1⋅pmax(a2,b2,c2)2⋯pmax(ar,br,cr)rlcm(x,y,z)=p1max(a1,b1,c1)⋅p2max(a2,b2,c2)⋯prmax(ar,br,cr)

同样,p1,p2.....prp1,p2.....pr是指三个数中所有不同的质因子

这样一来

对于给定的G和L,我们就可以知道每一个质因数在三个数中的最小指数和最大指数

比如
G=pe11⋅pe22⋯perrG=p1e1⋅p2e2⋯prer

L=pw11⋅pw22⋯pwrrL=p1w1⋅p2w2⋯prwr

我们假设q是第三个指数,即那个中间值

即

min(ei,qi,wi)=eimin(ei,qi,wi)=ei

max(ei,qi,wi)=wimax(ei,qi,wi)=wi

很明显qiqi必须在[ei,wi][ei,wi]之间

下面我们进行分类讨论:

(1)qiqi的值既不等于eiei也不等于wiwi,即qi∈(ei,wi)qi∈(ei,wi):

此时共有wi−ei−1wi−ei−1种选择,而且题目中说了,相同数字顺序不同算不同情况,所以对于三个互不相同的数字一共有A(3,3)种情况

即ans=A(3,3)×(wi−ei−1)=6×(wi−ei−1)ans=A(3,3)×(wi−ei−1)=6×(wi−ei−1)

(2) qiqi的值等于eiei或者wiwi时,首先他有两种选择,那么对于给定三个数字中两个有相同的数字的排列方式,一共有A(3,1)种

即ans = 3 × 2 种

综上对于一个素因子来说它的可选择的方案为上述两种情况加起来

ans=6×(wi−ei)ans=6×(wi−ei)

那么根据乘法原理,对于所有的素因子来说,所有的可能数便是每个素因子的

ans=6×(wi−ei)ans=6×(wi−ei)

相乘得到的结果

注意:!!!!!

如果当wiwi和eiei相等时,根据公式ans=6×(wi−ei)ans=6×(wi−ei),此时为0,那么如果一乘就全没了,那么此时我们需要特判,即这种情况下,三个指数相同,那么只有一种情况,相当于乘1,直接跳过即可

好题鸭,可能是因为太菜。。(大佬们觉得这是水题。。。)
code:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
typedef long long ll;
const int maxn = 1e5+10;
ll w[maxn][2],e[maxn][2],cntG,cntL;
void divide(int G,int L){
    cntG = cntL = 0;
    for(int i = 2; i * i <= G; i++){
        if(G % i == 0){
            e[cntG][0] = i;
            e[cntG][1] = 0;
            while(G % i == 0){
                e[cntG][1]++;
                G /= i;
            }
            cntG++;
        }
    }
    if(G != 1){
        e[cntG][0] = G;
        e[cntG++][1] = 1;
    }
    for(int i = 2; i * i <= L; i++){
        if(L % i == 0){
            w[cntL][0] = i;
            w[cntL][1] = 0;
            while(L % i == 0){
                w[cntL][1]++;
                L /= i;
            }
            cntL++;
        }
    }
    if(L != 1){
        w[cntL][0] = L;
        w[cntL++][1] = 1;
    }
}
ll solve(int G,int L){
    if(L % G != 0) return 0;
    divide(G,L);
    ll ans = 1;
    ll v;
    for(int i = 0; i < cntL; i++){//遍历枚举找相同素因子
        int flag = 0;
        for(int j = 0; j < cntG; j++){
            if(w[i][0] == e[j][0]){//找到相同质因子
                flag = 1;
                v = j;//记录下位置
                break;
            }
        }
        if(!flag) ans = ans * 6 * w[i][1];//如果找不到与lcm中相同的质因子,说明在gcd中该质因子指数为0
        else{//如果找到
            ll t = w[i][1] - e[v][1];
            if(!t) continue;//如果相减为0,不能乘,相当于只有1种,直接跳过即可
            ans = ans * 6 * t;//否则按照推导公式求
        }
    }
    return ans;
}
int main(){
    int T;
    int G,L;
    scanf("%d",&T);
    while(T--){
        scanf("%d%d",&G,&L);
        ll ans = solve(G,L);
        printf("%lld\n",ans);
    }
    return 0;
}
编写函数,求两个正整数的最小公倍数def05.py def lcm(a,b): for i in range(min(a,b),0,-1): if a%i==0 and b%i==0: return a*b//i c=int(input("请输入第一个数:")) d=int(input("请输入第二个数:")) print("这两个数的最小公倍数:") print(lcm(c,d)) 立即下载

相关推荐

克里金插值(Kriging)在MATLAB中的实现(克里金工具箱)

一,直接献上克里金插值MATLAB工具箱 链接:https://pan.baidu.com/s/1p0lt2G8KQ-els7Dyw5jPFg 提取码:wcss 下载后将该程序添加到MATLAB安装文件夹中的/toolbox下,然后在设置路径中添加该程序文件为默认路径即可调用程序。 资源中内附程序使用说明PDF。 二、本人实际操作代码如下所示,标注如下 load data1 %载入数据 %模型参...

qq_40937675的博客 6万+

AOJ 0005 GCD and LCM 最大公约数和最小公倍数入门

Write a program which computes the greatest common divisor (GCD) and the least common multiple (LCM) of given a and b. Input Input consists of several data sets. Each data set contains a and b separa...

RPG_Zero的博客 224

Cesium创建无人机视锥,同步视锥与鹰眼地图视角,实现视锥键盘控制。解决视锥初始化位置不准确问题等

本文描述了一个基于Cesium的3D视锥体可视化系统开发过程。系统实现了主视图与鹰眼视图的双屏联动,支持通过键盘控制视锥体的空间移动(WASD前后左右,Q/E旋转,C/Z升降),并实时同步更新两个视图。关键技术包括:1)基于主视图Scene创建Camera实现视锥体精确绘制;2)通过PerspectiveFrustum设置视锥参数;3)建立双视图的相机位置及视角同步机制。目前暂未实现视锥体far/near边界在鹰眼视图中的可视化,该系统可应用于无人机视角监控等三维场景交互需求。

coder_bin的博客 1588

【XSY2470】lcm 数学

题目大意  tt组询问, 每组询问给定nn,求∑nk=1[n,k]\sum_{k=1}^n[n,k],其中[a,b][a,b]表示aa和bb的最小公倍数 .  t≤300000,n≤1000000t\leq 300000,n\leq 1000000题解∑k=1n[k,n]=n∑k=1nk(k,n)=n∑p|n∑k=1nk[(k,n)=p]=n∑p|n∑k=1⌊np⌋kp[(k,np)=1]=n∑p|

ez_yww的博客 1179

多标签损失之Hamming Loss(PyTorch和sklearn)、Focal Loss、交叉熵和ASL损失

多标签损失

wuli_xin的博客 4461

IGBT基础知识

IGBT

u010783226的专栏 1万+

最大公约数(GCD)和最小公倍数(LCM)

概念: 互质数(也叫互素):互质数为数学中的一种概念,即两个或多个整数的公因数只有1的非零自然数。公因数只有1的两个非零自然数,叫做互质数。       两个数a和b的最大公约数(Greatest Common Divisor)是指同时整除a和b的最大因数,记为gcd(a, b)。特殊的,当gcd(a, b) = 1,我们称a和b互素(上文略有提及)。       两个数a和b的最小公...

Alibaba_lhl的博客 4077

基于Simulink和Control System Toolbox的线控转向(Steer-by-Wire)系统设计

通过上述步骤,我们成功设计并实现了基于 Simulink 和 Control System Toolbox 的线控转向(Steer-by-Wire)系统。该系统能够接收来自方向盘的角度指令,经过控制器处理后,驱动转向执行器(如电动机),实现对车辆前轮转向角度的精确控制。通过虚拟场景仿真、硬件在环测试和实车测试,验证了系统的响应速度、控制精度、车辆稳定性和实时性能,并通过参数优化进一步提升了系统的性能。

MHD0815的博客 549

jzoj3775 因子的排列

Description一天,小B学习了分解质因数的相关内容。他发现,一个数的质因子可以有许多不同的排列方式,例如20=2*2*5=2*5*2=5*2*2,那么小B认为20的质因子有3种不同的排列方式。小B的同学现在有一个问题:如果一个整数的质因子的不同的排列方式的种类数为k,那么这个整数n(n>1)最小是多少?小B的同学一共有T个不同的k值,希望小B帮助这个同学解决问题。但是小B发现T太大了,并且给

ChickenT的博客 335

【MATLAB】嵌入式PID控制参数整定与优化

本文提出了一种基于MATLAB仿真的嵌入式PID参数优化方法,解决了传统人工试凑法效率低、适应性差的问题。通过建立一阶滞后被控对象模型,对比分析了不同PID参数组合的性能表现,筛选出最优参数。仿真结果表明,优化后的PID参数能有效降低超调量(从传统方法的显著超调降至接近0%),缩短调节时间,提高稳态精度。最终将优化算法部署到STM32平台,实现了"仿真整定-参数优化-嵌入式落地"的完整开发流程。该方法显著提升了嵌入式系统的响应速度和控制精度,为工业控制应用提供了标准化解决方案。

unber的博客 45

博途PLC模糊PID控制(附SCL完整源代码)

操作人员根据对象的当前状态和以往的控制经验,用手动控制的方法给出适当的控制量,对被控对象进行控制。用电脑模拟操作人员手动控制的经验,对被控对象进行控制。用模糊数学的知识模仿人脑的思维方式,对模糊现象进行识别和判决,给出精确的控制量,对被控对象进行控制。与经典控制理论和现代控制理论相比,模糊控制的特点是不需要建立对象的精确模型。根据操作人员手动控制的经验,总结的完整控制规则,在根据系统当前的运行状态,经过模糊推理,模糊判决等运算,求出控制量,实现对被控对象的控制。......

RXXW_Dor的博客 8960

【算法】唯一分解定理及最lcm和gcd关系 宝石组合

唯一分解定理和lcm和gcd 宝石组合

m0_73209194的博客 2381

Unity GameObject 核心机制深度解析:从底层结构到工程实践

从底层机制讲透 Unity GameObject:托管壳加原生芯的双层对象模型如何制造假 null 陷阱、Transform 层级与组件通信的原理、生命周期回调的确切顺序。文章同时给出 Instantiate 成本分析与对象池等高频场景的工程实践。

游戏人生 39

HDU-4497-GCD and LCM(质因子分解+思维/组合数)

GCD and LCM 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, whi

qq_43461168的博客 290

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

LCM and GCD HDU 4497 +基础总结

之前在学习中,做过一些数论的题,但是都忘记了,所以从现在开始,数论的题目也纳入我的博客之中,但是又不太好分类,终于在网上找到了一道例题,巩固了一下基础,HDU4497,接下来分享一些知识还有这道题的题解。 题目大意:给你一个LCM与GCD,问是否存在(x,y,z)这样一组解,使得这三个数的LCM为n,GCD为m,输入n与m,求出(x,y,z)解的总数。 一、两个数的GCD与LCM 三个数的太...

一只酷酷光儿的博客 607

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

GCD+LCM+唯一分解定理

第一行留给本鸽子精咕咕咕。 第二行——我队友已经学习很久了,我已经玩手机很久了。(我是辣鸡 其实很久之前写过gcd的,然而现在回过去看实在是惨不忍睹,一个人的代码竟然可以写的那么丑(虽然我现在写的也不怎么好看)(其实是打算补学数论部分,刚好完善一下gcd和lcm)。 以下为正文: 1.gcd:利用辗转相除法(欧几里得算法)来求最大公约数。 a,b均能整除gcd(a,b)得到a1,b...

MoonLight_月亮 775

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

C - Orac and LCM(lcm,gcd性质)

题意:给个序列,求所有两两组合的lcm,对这些lcm再求gcd。 性质:两个数的lcm等于,他们各自质因子次数大者的乘积,例如lcm(10,24)=120,其中10=2^1 *5^1, 24=2^3 *3^1,lcm就是取 2^3, 3^1, 5^1。 思路:对于每一个质因子,用k描述它在序列所有数中的出现的次数,如果有2个及以上的数没有这个质因子,那么这两个数的lcm也不包含这个因子,否则对于每一对数的lcm来说都是包含这个因子的,那么现在需要做的是找出所有对的lcm中每个质因子次数最小的。。。。就这样

qq_43543086的博客 403

POJ2429 GCD & LCM Inverse - 数论 - 质因子分解 - Pollard-pho算法

GCD & LCM Inverse Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 20548 Accepted: 3774 Description Given two positive integers a and b, we can easily calculate the greatest common div...

太阳升起 421

GCD and LCM HDU - 4497 排列组合

问题: 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 com...

HXX904的博客 282

从Hankson趣味题解析GCD/LCM与质因数分解在算法竞赛中的应用

最大公约数(GCD)和最小公倍数(LCM)是数论与算法设计中的基础概念,它们描述了整数之间的整除与倍数关系。其核心原理基于算术基本定理,即任何大于1的整数均可唯一分解为质因数的乘积,GCD对应各质因子指数取最小值,LCM则取最大值。这一原理在算法优化中具有重要价值,能将复杂的约束条件转化为对质因子指数的方程组求解,从而大幅缩小搜索空间。在算法竞赛、编程面试等场景中,此类问题常通过质因数分解与约数枚举技术解决。本文以经典数论问题“Hankson的趣味题”为例,深入探讨如何利用质因数分解和深度优先搜索(DFS)

weixin_33585822的博客 341

hdu 4497 GCD and LCM(组合数学)

题目链接:hdu 4497 GCD and LCM 题目大意:给出三个数的最大公约数和最小公倍数,问说有多少种三个数满足。 解题思路:首先用k=l/g,剩下的数即为三个中还需要存在的因子的乘积。然后将k分解成质因子; 以6 72为例,k = 72/6=12,k分解成质因子为2,2,3,不同因子间肯定是互相不影响的,只要计算出每种因子的放法,相乘即为总数。 现在考虑2这个因子

不慌不忙、不急不躁 1409

GCD and LCM (HDU 4497) 数论(排列组合)

    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 co...

原味炒酸奶 371

hdu 4497 GCD and LCM (gcd与lcm的关系)

题目链接:哆啦A梦传送门 题意:给出 gcd(x,y,z)=G, lcm(x,y,z)=L的G,L。找出有多少种可能对(x,y,z),注意(1,2,3)与(1,3.2)为不同的对。 题解: 参考链接:https://blog.youkuaiyun.com/cnh294141800/article/details/14452893 前要:最大公约数G与最小公倍数L的关系 1,L%G==0。 2,设A...

Jiandong 837

HDU - 4497 GCD and LCM (数论基础 + 组合数)

GCD and LCM 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 grea...

Error Man 的博客 304

28行代码AC——Minimum Sum LCM UVA - 10791(最大质因子)

励志用尽量少的代码做高效表达 题目(提交)链接——>UVA - 10791 题意 输入正整数n,找至少两个数,使得他们的最小公倍数(Least Common Multiple)为n且要输出最小的和。 心路历程 最近在备考蓝桥杯, 将本题纳入分解质因子专题。 接连刷了一下午的题, 脑瓜子嗡嗡的,看这道题时连题意都没读懂就稀里糊涂的开始敲了,WA,后又读题,调试一小时,成功AC。 首先假设我们知道了一系列数字a1,a2,a3……an,他们的LCM是n,那么什么时候他们是最优解呢,当他们两两互质的时候

weixin_43899069的博客 1165

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 * …...

zeng_jun_yv的博客 334
上一篇: Second My Problem First(单调队列)
下一篇: Revenge of GCD (枚举+gcd)
Guuuuuu老师儿
博客等级 码龄9年 259粉丝 718原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值