刷题心得之位运算技巧 gcd 和 lcm

news2024/11/20 15:23:39

位运算 gcd 和 lcm

  • 位运算技巧
    • 遍历 n 的所有子集, 不包括空集
    • 遍历 n 的所有子集, 包括空集
    • 提取出 n 二进制中第一次出现的1
    • 消除 n 二进制中第一次出现的1
    • 判断 n 是否是 2 的幂次方
  • gcd [最大公约数]
  • lcm [最小公倍数]

位运算技巧

遍历 n 的所有子集, 不包括空集

#include <cstdio>
#include <iostream>

using namespace std;

// 打印一个数的二进制, 方便理解
void Print(int n)
{
	for (int i = 31; i >= 0; i--)
	{
		cout << ((n >> i) & 1);
	}
	cout << endl;
}

// 从大到小,枚举 n 的所有非空子集
void test2(int n)
{
	for (int sub = n; sub; sub = (sub - 1) & n)
	{
		printf("%4d---", sub);
		Print(sub);
	}
}

int main()
{
	cout << "枚举 n 的所有子集,不包括空集" << endl;
	test2(77);
	
	return 0;
}

遍历 n 的所有子集, 包括空集

#include <cstdio>
#include <iostream>

using namespace std;

// 打印一个数的二进制, 方便理解
void Print(int n)
{
	for (int i = 31; i >= 0; i--)
	{
		cout << ((n >> i) & 1);
	}
	cout << endl;
}

// 从大到小枚举 n 的所有子集 【从 n 枚举到空集】
void test1(int n)
{
	int sub = n;
	do
	{
		printf("%4d---", sub);
		Print(sub);
		sub = (sub - 1) & n;
	} while (sub != n);
}

int main()
{
	cout << "枚举 n 的所有子集,包括空集" << endl;
	test1(77);
	
	return 0;
}

提取出 n 二进制中第一次出现的1

#include <cstdio>
#include <iostream>

using namespace std;

// 打印一个数的二进制, 方便理解
void Print(int n)
{
	for (int i = 31; i >= 0; i--)
	{
		cout << ((n >> i) & 1);
	}
	cout << endl;
}

// 提取出 n 二进制中第一次出现的1
void test4(int n)
{
	// 二进制中 n 第一次出现1的位置
	int tem = n & (-n);
	printf("%4d---", tem);
	Print(tem);
}

int main()
{
	cout << "提取出 n 第一次出现1的位置" << endl;
	printf("%4d---", 40);
	Print(40);
	test4(40);
	
	return 0;
}

消除 n 二进制中第一次出现的1

#include <cstdio>
#include <iostream>

using namespace std;

// 打印一个数的二进制, 方便理解
void Print(int n)
{
	for (int i = 31; i >= 0; i--)
	{
		cout << ((n >> i) & 1);
	}
	cout << endl;
}

// 消除 n 二进制中第一次出现的1
void test5(int n)
{
	// 消除
	int tem = n & (n - 1);
	printf("%4d---", tem);
	Print(tem);
}

int main()
{
	cout << "消除 n 二进制中第一个1" << endl;
	printf("%4d---", 50);
	Print(50);
	test5(50);
	
	return 0;
}

判断 n 是否是 2 的幂次方

#include <cstdio>
#include <iostream>

using namespace std;

// 打印一个数的二进制, 方便理解
void Print(int n)
{
	for (int i = 31; i >= 0; i--)
	{
		cout << ((n >> i) & 1);
	}
	cout << endl;
}

// 判断 n 是否是2的幂次方
void test6(int n)
{
	// 特判 0 
	if (n == 0)
	{
		printf("%4d--- NO  ", n);
		Print(n);
	}
	// 2的幂次方, 二进制中有且只有一位是1
	else
	{
		if ((n & (n - 1)) == 0)
		{
			printf("%4d---YES  ", n);
			Print(n);
		}
		else
		{
			printf("%4d--- NO  ", n);
			Print(n);
		}
	}
}

int main()
{
	for (int i = 0; i < 30; i++)
	{
		test6(i);
	}
	
	return 0;
}

gcd [最大公约数]

#include <cstdio>
#include <iostream>

using namespace std;

// 输出 m 和 n 的最大公约数
// 辗转相除法
int gcd(int m, int n)
{
	// 默认认为 m >= n
	if (m < n )  return gcd(n, m);
	if (n == 0)  return m;
	return gcd(n, m % n);
}

int main()
{
	int m = 13, n = 65;
	int res = gcd(m, n);
	printf("%d 和 %d 的最大公约数是: %d", m, n, res);
	
	return 0;
}

lcm [最小公倍数]

#include <cstdio>
#include <iostream>

using namespace std;

// 输出 m 和 n 的最小公倍数
int lcm(int m, int n)
{
	return (m * n) / gcd(m, n);
}

int main()
{
	int m = 13, n = 65;
	int res = lcm(m, n);
	printf("%d 和 %d 的最小公倍数是: %d\n", m, n, res);
	
	return 0;
}


黄梅时节家家雨,青草池塘处处蛙。
有约不来过夜半,闲敲棋子落灯花。
— — <约客> 赵师秀 [宋]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1954768.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

52.TFT_LCD液晶屏字符显示

&#xff08;1&#xff09;实验目标&#xff1a;在5寸显示屏&#xff08;800 * 480 60&#xff09;中央显示汉字&#xff08;黄色&#xff09;&#xff0c;且背景颜色为青色。 &#xff08;2&#xff09;代码编写&#xff1a; tft_ctrl模块&#xff1a; module tft_ctrl(inp…

电子电气架构---域控制器的软硬件趋势

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…

TiDB-从0到1-sync-diff-inspector数据校验工具

TiDB从0到1系列 TiDB-从0到1-体系结构TiDB-从0到1-分布式存储TiDB-从0到1-分布式事务TiDB-从0到1-MVCCTiDB-从0到1-部署篇TiDB-从0到1-配置篇TiDB-从0到1-集群扩缩容TiDB-从0到1-数据导出导入TiDB-从0到1-BR工具 一、sync-diff-inspector工具 sync-diff-inspector是TiDB原生…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第六十二章 定时器按键消抖实验

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

详解Mysql InnoDB引擎 04

文章目录 1. InnoDB 简介2. 逻辑存储结构2.1 表空间 idb文件2.2 段2.3 区 1M2.4 页 16KB2.5 行 3. 架构3.1 内存结构3.1.1 Buffer Pool 缓冲池3.1.2 Change Buffer 更改缓冲区3.1.3 Adaptive Hash Index3.1.4 Log Buffer 3.2 磁盘结构 4. 后台线程5. 事务原理5.1 redo log 重做…

Pytorch深度学习实践(9)卷积神经网络

卷积神经网络 全连接神经网络 神经网络中全部是线性模型&#xff0c;是由线性模型串联起来的 全连接网络又叫全连接层 卷积神经网络 在全连接神经网络中&#xff0c;由于输入必须是一维向量&#xff0c;因此在处理图像时必须要对图像矩阵进行拉伸成一维的形式&#xff0c;…

视觉巡线小车(STM32+OpenMV)——总结

文章目录 目录 文章目录 前言 一、效果展示 二、完整流程 1、STM32CubeMX配置 2、Keil编辑 3、硬件接线 4、参数调试 5、图像处理调试 三、总结 前言 基于前面的系列文章&#xff0c;已基本介绍完了基于STM32OpenMV的视觉巡线小车&#xff0c;本文将以小编自己的小车…

BACnet物联网关BL103:Modbus协议转BACnet/MSTP

随着物联网技术在楼宇自动化与暖通控制系统中的迅猛发展&#xff0c;构建一种既经济高效又高度可靠的协议转换物联网关成为了不可或缺的核心硬件组件。在此背景下&#xff0c;我们钡铼特别推荐一款主流的BAS&#xff08;楼宇自动化系统&#xff09;与BACnet物联网关——BL103&a…

小世界特性解析——聚类系数与平均路径长度的奥秘

小世界特性解析——聚类系数与平均路径长度的奥秘 小世界特性的核心衡量指标 小世界特性&#xff0c;这一复杂网络中的重要概念&#xff0c;主要通过两个关键指标来衡量&#xff1a;聚类系数和平均路径长度。这两个指标共同揭示了网络结构的紧密程度和信息传播的效率。 聚类…

echarts没数据的时候,页面显示暂无数据

echarts没数据的时候&#xff0c;页面显示暂无数据 给个if判断 let option{} if(data.length0){ //没有数据或者数据不合法,显示暂无数据option {title: {text: 暂无数据,x: center,y: center,textStyle: {fontFamily: Manteka,fontSize: 12,fontWeight: normal,color: #333…

使用 Copilot 对 OneDrive 文档分享进行摘要

对于大量使用onedrive进行资料分享的用户而言&#xff0c;对分享的文件进行简要说明并提供给对方&#xff0c;是一个基本素养。 在以往&#xff0c;他们只能阅读文件名然后靠回忆进行撰写&#xff0c;或者打开每一个文档通读全文然后再关闭返回并撰写摘要。 当用户在 SharePo…

Java聚合快递小程序对接云洋系统程序app源码

​一场物流效率的革命 引言&#xff1a;物流新时代的序章 在数字化浪潮席卷各行各业的今天&#xff0c;物流行业也迎来了前所未有的变革。为了进一步提升物流效率&#xff0c;优化用户体验&#xff0c;聚合快递系统与云洋系统小程序的对接成为了行业内外关注的焦点。这一创新…

基于JSP的毕业生就业信息管理系统

你好&#xff0c;我是专注于信息系统开发的码农小野&#xff01;如果你对毕业生就业信息管理有需求&#xff0c;欢迎联系我。 开发语言&#xff1a;JSP 数据库&#xff1a;MySQL 技术&#xff1a;JSP技术 SSM框架 工具&#xff1a;Eclipse、Maven、Navicat 系统展示 首页…

登录案例(JAVA)

练习1 package lx2;import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.Scanner;public class demo1 {/*需求&#xff1a;写一个登陆小案例。步骤…

Hive环境搭建(内置数据库)

实验目的】 1) 了解hive的作用 2) 熟练hive的配置过程&#xff08;内置数据库&#xff09; 【实验原理】 Hive的架构是由Client、Metastore、Driver、Compiler构成&#xff0c;执行流程是编译器可以将一个Hive QL转换成操作符&#xff0c;操作符是Hive中的最小处理单元。…

【BUG】已解决:UnicodeDecodeError: ‘utf-8’ codec can’t decode bytes in position 10

UnicodeDecodeError: ‘utf-8’ codec can’t decode bytes in position 10 目录 UnicodeDecodeError: ‘utf-8’ codec can’t decode bytes in position 10 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#x…

torch fbgemm.dll 报错

这里写自定义目录标题 OSError: [WinError 126] The specified module could not be found. Error loading \"c:\\Users\\Noor\\anaconda3\\envs\\DL\\Lib\\site-packages\\torch\\lib\\fbgemm.dll\" or one of its dependencies."https://github.com/lucasg/De…

在VMware创建Ubuntu24

目录 一、创建虚拟机 1. 自定义创建虚拟机 2. 设置虚拟机兼容 3. 选择镜像 4. 命名虚拟机&#xff0c;选择存放位置 5. 处理器配置 6. 内存配置 7. 网络类型配置 8. I/O控制器类型 9. 磁盘配置 10. 完成虚拟机创建 二、Ubuntu安装 1. 进入虚拟机中进行ubuntu的安…

java算法day25

java算法day25 广度优先搜索岛屿数量深搜岛屿数量广搜 广度优先搜索 核心&#xff1a;从起点出发&#xff0c;以起始点为中心一圈一圈进行搜索&#xff0c;一旦遇到终点&#xff0c;记录之前走过的节点就是一条最短路。搜索的方式是上下左右 一张图说明白模拟过程&#xff1…

21.发布确认模式-高级

问题 生产环境中由于一些不明原因&#xff0c;导致rabbitmq重启&#xff0c;在重启的期间生产者消息投递失败&#xff0c;导致消息丢失&#xff0c;需要手动处理恢复。那么如何才能进行rabbitmq的消息可靠性投递&#xff1f;特别是在极端的情况&#xff0c;rabbitmq集群不可用…