首页 > 其他分享 >最大公约数和最小公倍数

最大公约数和最小公倍数

时间:2024-02-09 16:44:24浏览次数:19  
标签:return gcd 公倍数 最小 long int 最大公约数

一、问题描述

P1029 [NOIP2001 普及组] 最大公约数和最小公倍数问题

二、问题简析

2.1 最大公约数

求两个正整数的最大公约数gcd (greatest common divisor),最常用的方法是辗转相除法

// 求a和b的最大公约数
int gcd(int a, int b)
{
	if (b == 0)    return a;
	return gcd(a, a % b);
}

2.2 最小公倍数

最小公倍数lcm (largest common multiply)与最大公约数存在一个关系:\(a \ast b = lcm(a, b) \ast gcd(a, b)\)。

// 求a和b的最小公倍数
int lcm(int a, int b)
{
	return a * b / gcd(a, b);
}

三、本题代码

#include <bits/stdc++.h>

using namespace std;

long long x, y;

long long gcd(int a, int b)
{
	if (b == 0)    return a;
	return gcd(b, a % b);
}

long long lcm(int a, int b)
{
	return a * b / gcd(a, b);
}

int main()
{
	scanf("%d%d", &x, &y);
	long long ans = 0, max = x * y;
	for (long long i = 1; i * i <= max; i++)
	{
		if (max % i == 0 && gcd(i, max / i) == x && lcm(i, max / i) == y)
		{
			if (i != max / i)    ans += 2;
			else    ans += 1;
		}
	}
	printf("%lld\n", ans);

	return 0;
}

本题有以下注意点:

  • 1、变量要用 long long 声明
  • 2、只需要遍历 i * i <= max 即可。注意 i * i == max 时,只需 +1,其它情况下,+2

标签:return,gcd,公倍数,最小,long,int,最大公约数
From: https://www.cnblogs.com/hoyd/p/18012520

相关文章

  • 代码随想录算法训练营第十六天| 104.二叉树的最大深度 559.n叉树的最大深度 111.二
    104.二叉树的最大深度  题目链接:104.二叉树的最大深度-力扣(LeetCode)n叉树也一样思路:我的普通递归方法classSolution{public:intdepth(TreeNode*node,intd){intl=0,r=0;if(node->left==NULL&&node->right==NULL)returnd;if(node-......
  • (16/60)二叉树最大深度、最小深度、完全二叉树结点个数
    终于熬到了春节假~~有些手感了深度与高度深度是从根结点到叶结点的距离;高度是从叶结点到根结点的距离。深度从上往下(根为1);高度从下往上(叶为1)。二叉树最大深度leetcode:104.二叉树的最大深度后序递归法思路复杂度分析时间复杂度:O(N)。遍历了一遍。空间复杂度:和层数有关......
  • 机器学习之最小二乘法
    最小二乘法概述最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。最小二乘法还可用于曲线拟合。其他一些优化问题也可通过最小化能......
  • 代码随想录算法训练营第十三天 | 59.螺旋矩阵II 209.长度最小的子数组 977.有序数
    977.有序数组的平方 已解答简单 相关标签相关企业 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 示例1:输入:nums=[-4,-1,0,3,10]输出:[0,1,9,16,100]解释:平方后,数组变为[16......
  • 最小生成树
    记录18:222024-2-1目录1.最小生成树1.Prim2.Kruskal1.最小生成树1.Prim类似dijkstra,优化可以用最小堆来维护权值最小边点击查看代码constintINF=0x3f3f3f3f;intcost[MAX_V][MAX_V];//cost[u][v]边e(u,v)的权重不存在设为INFintmincost[MAX_V];boolused[MAX......
  • 最小生成树
    【最小生成树是什么】在一张图\(G\)(设\(n\)个结点)中,选取\(n-1\)条边,用这些边把结点之间连通。那么这\(n-1\)条边和原来的结点所构成的图\(S\),就叫做\(G\)的生成树。最小生成树,就是希望\(S\)中边权的和最小。而求最小生成树,有两种比较常用的方法:Kruskal和Prim。......
  • flex布局 自适应宽高 缩放到内容高度时不再进行缩放, 需求设置最小高度超出滚动条,并隐
    在需要滚动的元素内部添加一层div,并添加样式:position:absolute;父级样式添加 position:relative;即可<divclassName="pcCommon_left_top">          <divstyle={{position:'absolute',width:'calc(100%-72rem)'}}>     ......
  • 最小覆盖子串
    问题描述:给定一个字符串S和一个字符串T,请在S中找出包含T所有字母的最小子串。示例:输入:S="ADOBECODEBANC",T="ABC"输出:"BANC"说明:如果S中不存这样的子串,则返回空字符串""。如果S中存在这样的子串,我们保证它是唯一的答案。/***思路:*我们可以考......
  • 长度最小的子数组
    问题描述:给定一个含有n个正整数的数组和一个正整数s,找出该数组中满足其和≥s的长度最小的连续子数组。如果不存在符合条件的连续子数组,返回0。示例:输入:s=7,nums=[2,3,1,2,4,3]输出:2解释:子数组[4,3]是该条件下的长度最小的连续子数组。进阶:如果你......
  • hdu 4460 Friend Chains (图最长路的最小值)
    Problem-4460(hdu.edu.cn)写完提交答案错了,后面发现vis初始化的地方错了,以前BFS都只调用一次,看来我中毒太深。这个题更能体现BFS的特性,增加dis数组记录距离。#include<iostream>#include<queue>#include<cstring>#include<vector>#include<map>usingnamespacestd;c......