【基础算法】几种特殊数(素数、公约数、完全数、亲密数) C++实现

news2024/12/23 6:09:33


●素数

        素数又称为质数,它指在一个大于1的自然数中,除了1和它自身外,没法被其他自然数整除的数。比1大,但不是素数的数称为合数。0和1既不是素数,也不是合数。因为素数的分布没有明显的规律,所以在程序中一般根据素数的定义来判断该数是否为素数。例如哥德巴赫猜想:哥德巴赫通过大量的数据猜测,所有不小于6的偶数,都可以表示为两个奇素数之和。后人将其称之为“1+1”。并且,对于每个不小于9的奇数,都可以表示为三个奇素数之和。

#include<iostream>
using namespace std;
class isprime {
public:
	void isprime1()
	{
		int k=0;
		for (int i = a; i <= b; i++)
		{
			if(i==2||i==3)
			{ 
				k = 1;
			}
			for (int j = 2; j <= i/2 ; j++)   
			{
				if (i % j == 0)
				{
					k = 0;
					break;
				}
				else
				{
					k = 1;
				}
			}
			if (k == 1)
			{
				cout << i << " ";
			}
		}
	}
	int a;
	int b;
};
void text()
{
	isprime ip;
	cout << "请输入一个区间范围:" << endl;
	cin >> ip.a >> ip.b;
	cout << "该区间范围内的素数有:" << endl;
	ip.isprime1();
}
int main()
{
	text();
}


 ●最大公约数

        最大公约数和最小公倍数是我们频繁接触的一对数。如果有一个自然数m能被自然数n整除,则称m为n的倍数,b为a的约数。多个自然数公共的约数,叫做这几个自然数的公约数。而公约数中最大的一个,就称为这几个自然数的最大公约数。

         计算两个自然数最大公约数的传统算法就是欧几里得的辗转相除法,对于要对多个自然数寻找其最大公约数可以通过多次辗转相除法得到,具体步骤如下:

①已知两自然数m、n,假设m>n;

②计算m除以n,将得到的余数记为r;

③如果r=0,则n为求得的最大公约数,否则执行下面一步;

④将n的值保存到m中,将r的值保存到n中,重复执行步骤②和③,直到r=0,便得到最大公约数;

#include<iostream>
using namespace std;
class max_public_number {
public:
	int max_public_number1()
	{
		int temp;
		if (m > n){
			m = m;
			n = n;
		}
		else{
			temp = m;
			m = n;
			n = temp;
		}
		r = m % n;
		while (r!= 0)   //辗转相除法
		{
			m = n;
			n = r;
			r = m % n;
		}
		return n;
	}
	void showresult()
	{
		cout << n << endl;
	}
	int m;
	int n;
	int r;
};
void text()
{
	max_public_number mpn;
	cout << "请输入两个数:" << endl;
	cin >> mpn.m>>mpn.n;
	cout << "这两个数的最大公约数为:" << endl;
	mpn.max_public_number1();
	mpn.showresult();
}
int main()
{
	text();
}


 ●完全数

        当一个自然数的所有真因子之和等于该自然数,那么该自然数便是完全数(完全数的尾数都是6或8)。

 完全数的特殊性质:

1.每个完全数都可以表示成连续自然数的和

 2. 每个完全数都是调和级数

3.每个完全数都可以表示为2的一些连续正整数次幂之和

4.除6之外的完全数都可以表示成连续的奇立方之和

#include<iostream>
using namespace std;
class perfectnum {
public:
	void perfectnum1()
	{
		for (int i = 1; i < range; i++)
		{
			long num = i;
			long sum = num;   //这里将num赋给sum,在下面num去判断寻找因子,sum去进行逐渐判断是否为完全数
			long count = 0;  //记数组下标数
			for (int j = 1; j < num; j++)
			{
				if (num % j == 0)   //判断j是否为num的真因子
				{
					p[count++] = j;  //若是因子,我们将其记录在数组内
					sum -= j;		//对sum进行逐减因子
				}
			}
			if (sum == 0) //如果sum能被因子逐减为0,则说明他为完全数
			{
				cout << "完全数:" << num << endl;
				for(int k=0;k<count;k++)
				{ 
					cout << p[k] << " ";    //输出每个完全数的因子
				}
				cout << endl;
			}
		}
	}
	long p[100];
	int range;
};
void text()
{
	perfectnum pn;
	cout << "请输入一个范围:" << endl;
	cin >> pn.range;
	cout << "该范围内的完全数为:" << endl;
	pn.perfectnum1();
}
int main()
{
	text();
}


 ●亲密数

        如果整数a的因子和等于整数b,整数b的因子和等于整数a,因子包括1但不包括本身,且a不等于b,则称a,b为亲密数对。

比如,220的因子为1、2、4、5、10、11、20、22、44、55、110;284的因子为1、2、4、71、142。而220的因子和1+2+4+5+10+11+20+22+44+55+110等于284;284的因子和1+2+4+71+142等于220,并且因子包括1但不包括本身,220不等于284,所以这两数为亲密数对。

#include<iostream>
using namespace std;
class friendnum {
public:
	void friendnum1(int i)
	{
			for(int size=0;size<100;size++)  //每次的调用需将数组重复置空
			{ 
				a[size] = b[size] = 0;
			}
			count = 0;  //记录数组下标
			int sum_1 = 0;
			for (int j = 1; j < i / 2 + 1; j++)   //求数i的因子
			{
				if (i % j == 0)   //i能被j整除,j为因子
				{
					a[count++] = j;  //保存因子到数组a中
					sum_1 += j;  //累加因子之和
				}
			}
			count = 0;  //置零,重新记录数组下标
			int sum_2 = 0;
			for (int k = 1; k < sum_1 / 2 + 1; k++)   //将数i因子之和sum_1进行因子分解
			{
				if (sum_1 % k == 0)   //sum_1能被k整除
				{
					b[count++] = k;   //保存因子到数组b中
					sum_2 += k;		//累加因子之和
				}
			}
			if (sum_2 == i && i < sum_1)
			{
				cout<<sum_2<<"与"<<sum_1<< "是亲密数," <<"并前两数的因子如下:"<< endl;
				count = 0;
				while (a[count]!=0)
				{
					cout << a[count] <<" ";
					count++;
				}
				cout << endl;
				count = 0;
				while(b[count]!=0)
				{ 
					cout << b[count] << " ";
					count++;
				}
				cout << endl;
			}
	}
	int a[100];
	int b[100];
	int range;
	int count;
};
void text()
{
	friendnum fn;
	cout << "请输入一个范围:" << endl;
	cin >> fn.range;
	cout << "该范围内的亲密数为:" << endl;
	for (int a = 1; a <= fn.range; a++)
	{
		fn.friendnum1(a);
	}
}
int main()
{
	text();
}


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

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

相关文章

争议不断的AI绘画,如今成为了顶流?

今年以来&#xff0c;AIGC迅速崛起。所谓AIGC&#xff0c;即AI-Generated Content&#xff0c;指的是利用人工智能来生成内容&#xff0c;被认为是继专业产出内容&#xff08;PGC&#xff09;、用户产出内容&#xff08;UGC&#xff09;后的新型内容创作方式。不久前掀起热议的…

「小白学Python」Windows安装Python

前言 Python下载地址 https://www.python.org/ Python下载 打开上面的链接&#xff0c;打开 Python 的下载页面&#xff0c;如下图所示&#xff1a; 我们把鼠标放到 Downloads 上&#xff0c;然后点击 Windows&#xff0c;此时界面如下图所示&#xff1a; 这里&#xff0c;我…

使用python批量的转换图片的格式并保存

使用cv2.dnn实现GoogleNet图像分类 Face-recognition实现人脸识别 Opencv实现信用卡识别 Opencv实现停车位识别 DlibOpencv库实现疲劳检测 Dlib库实现人脸关键点检测&#xff08;Opencv实现&#xff09; OpencvYOLO-V3实现目标跟踪 YOLO-V3实时检测实现&#xff08;open…

str(n)cpy的注意事项以及memset的简单使用

目录 strcpy strncpy memset 前言&#xff1a;因为C语言不能像C的string那样重载、等运算符&#xff0c;所以C语言提供了用于字符串拷贝的函数strcpy与strncpy&#xff0c;但是这两个函数都存在着一些问题&#xff1b; 我们需要先知道&#xff0c;字符串的结束标志是\0&…

五年数据库专家,带你深入高性能 MySQL 架构系统,不要等到面试再追悔莫及

MySQL 作为互联网中非常热门的数据库&#xff0c;在高并发业务场景下&#xff0c;一条好的 MySQL 语句能为企业节省大量的运作时间和成本&#xff0c;这也是为何互联网大厂面试官最爱考察数据库底层和性能调优的原因。因此&#xff0c;了解其底层原理和架构的设计非常重要&…

2022年全球城市变迁研究报告

第一章 全球城市概述 全球城市 (Global City)&#xff0c;又称为世界城市 (World City)、国际大都市或国际都会城市&#xff0c;是指在财富、社会、经济、文化及政治层面直接影响全球事务的城市。近年来&#xff0c;随着全球化的扩张&#xff0c;城市文明与软实力的影响达到鼎…

redis的key过期事件不建议实现延时消息的原因

官网的解释 https://redis.io/docs/manual/keyspace-notifications/#timing-of-expired-events 简单的意思就是不能保证时效性&#xff0c;key过期事件可能会往后推个几分钟才触发&#xff0c;特别是数据量越来越大的时候。 而且一旦客户端处理失败&#xff0c;这个事件也不…

Linux 将 /home 目录与 / 根目录磁盘合并

1. Linux 下的 /home 目录与 / 目录 一般情况下进入 Linux 系统下的 / 目录&#xff0c;会看到如下目录列表。 [rootlocalhost /]# ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var可以看到其中包含 home 目录&…

SpringBoot实现WebSocket

一、什么是websocket WebSocket是HTML5下一种新的协议&#xff08;websocket协议本质上是一个基于tcp的协议&#xff09; 它实现了浏览器与服务器全双工通信&#xff0c;能更好的节省服务器资源和带宽并达到实时通讯的目的 Websocket是一个持久化的协议 二、新建SpringBoot工…

STM32读保护的解除和出现的原因,使用串口和ST-LINK Utility解除读保护

STM32读保护的解除和出现的原因&#xff0c;使用串口和ST-LINK Utility解除读保护STM32读保护读保护保护出现的现象出现的原因读保护解决方法1、重新下载CH340驱动2、FlyMcu串口下载软件接触读保护使用STM32 ST-LINK Utility软件解除读保护注意STM32读保护 读保护保护出现的现…

4-(1,2,2-三苯基乙烯基)苯甲醛;​CHO醛基偶联AIE材料

中文名 4-(1,2,2-三苯基乙烯基)苯甲醛 英文名 4-(1,2,2-triphenylvinyl)benzaldehyde 4-(1,2,2-三苯基乙烯基)苯甲醛物理化学性质 分子式 C27H20O 分子量 360.455 质量 360.151428 AIE聚集诱导发光材料的特点&#xff1a; 1.在固态下有强发光特性&#xff08;粉末或高浓度&am…

【Linux03-基本工具之GCC】Linux下的C语言编译器

前言 接上篇&#xff0c;继续学习基本工具。 三、gcc 是什么 Linux下的C语言编译器&#xff08;C的编译器是g&#xff0c;用法选项基本一样&#xff09;。 既然是编译器&#xff0c;我们就再来加点餐…… 链接其实分为两种类型&#xff1a;静态链接和动态链接&#xff0…

内切相减原理绘制CAD图形

CAD中的内切相减的原理你们知道是什么意思吗&#xff1f;这个就需要用CAD实际图形的绘制过程来理解了&#xff0c;这个图形就用到了这个&#xff0c;还用到了CAD直线、修剪、圆等命令共同绘制出来。 目标图形 操作步骤 1.使用CAD直线命令绘制一条长度30的垂直直线AC&#xff…

自定义 HandlerMethodArgumentResolver 怎么和默认HandlerMethodArgumentResolver进行隔离的?

工作中&#xff0c;想对一些参数进行非空默认值的操作。 DefaultValueIfNull("1000") 这个就是&#xff0c;如果为null&#xff0c;那么就默认值填1000。 操作起来。 1.自定义HandlerMethodArgumentResolver Component public class DefaultValueIfNullResolver…

seata-server-1.5.2的部署

使用的是nacos和mysql数据库&#xff0c;简单部署在Win10上&#xff0c;Linux上配置修改相同&#xff0c;启动命令不同。 找到 seata-server-1.5.2\seata\conf目录下的application.yml和application.example.yml 编辑 application.yml&#xff0c;原始版本如下&#xff1a; s…

RocketMq: Windows环境-单机部署和伪集群、集群部署

关于默认端口 broker的默认端口有3个,10911, 10912, 10909。 10911是remotingServer使用的监听端口,remotingServer主要处理以下三类消息: producer发送的消息 conumser在消费失败或者消费超时发送的消息 consumer拉取消息10912是主broker用于监听从broker请求…

制作路由器openwrt安装及配置

Openwrt软路由安装配置1、 Openwrt软路由设备信息&#xff1a; <1>登录信息&#xff1a; IP&#xff1a;10.4.1.1 账号&#xff1a;root<2>设备配置&#xff1a; 主机名 Openwrt 型号 ASUSTeK COMPUTER INC. Z9PA-U8 Series CPU 型号 Intel(R) Xeon(R) …

YOLO系列目标检测算法——PP-YOLO

YOLO系列目标检测算法目录 - 文章链接 YOLO系列目标检测算法总结对比- 文章链接 YOLOv1- 文章链接 YOLOv2- 文章链接 YOLOv3- 文章链接 YOLOv4- 文章链接 Scaled-YOLOv4- 文章链接 YOLOv5- 文章链接 YOLOv6- 文章链接 YOLOv7- 文章链接 PP-YOLO- 文章链接…

爬虫之selenium

目录 selenium介绍 基本使用 selenium用法 元素操作 等待元素被加载 元素各项属性 执行js代码 切换选项卡 浏览器前进后退 无界面浏览器 xpath的使用 简单介绍 selenium中使用 异常处理 登录获取cookie保存 动作链 打码平台使用(验证码破解) selenium介绍 由…

JavaScript -- 正则表达式及示例代码介绍

文章目录正则表达式1 正则表达式的介绍2 创建正则表达式3 通过整个表达式检查字符串是否符合规则4 正则表达式的基本语法5 提取符合规则的字符串6 例子正则表达式 1 正则表达式的介绍 正则表达式用来定义一个规则通过这个规则计算机可以检查一个字符串是否符合规则或者将字符…