算法中的数学一:判定质数和求约数相关

news2024/9/25 13:21:48

1.试除法求质数

    质数就是大于1的整数中除了1和自身没有其他因数的数

1.1暴力求解

     暴力求解的思路就是从2遍历到自身判断是否有被整除的数,时间复杂度为O(n)的

bool is_prime(int x)
{
    if(x<2)return false;
    for(int i=2;i<x;i++)
    {
      if(x%i==0)
      {
         return false;
      }
    }
  return true;
}

1.2调用sqrt库函数

     因数是成对出现的,如果d是x的因数,则x/d也是x的因数,又因为d<=x/d,则有d^2<=x,所以我们只需要遍历到根号x即可,如果在此之前没有因数,则往后也不会有,因为因数是成对出现的

bool is_prime(int x)
{
    if(x<2)return false;
    for(int i=2;i<sqrt(x);i++)
    {
      if(x%i==0)
      {
         return false;
      }
    }
  return true;
}

     我们也可以不调用库函数,而转化为i*i<=x的形式,这和开根号的思路是一样的,但是有一个问题,就是在x很大时,i*i会很大,造成溢出,这是很容易出现的问题,而调用库函数往往效率也是比较低的,所以我们必须要优化!

1.3试除法

     刚才我们提到如果d是x的因数,x/d也是x的因数,当其中一个存在时,另一个也必然存在;如果其中一个不存在,那么另一个也不存在,所以判断前面那一个就行了。

bool is_prime(int x)
{
    if(x<2)return false;
    for(int i=2;i<=x/i;i++)
    {
      if(x%i==0)
      {
         return false;
      }
    }
  return true;
}

      这样就将时间复杂度从O(n)降到了O(sqrt(n))。

2.试除法求约数

    前面我们知道如果d是x的因数,则x/i也是x的因数,所以我们只需要遍历前一部分即可,当i是x的因数时,我们要判断i是否等于x/i,如果不等于,就加入x/i,否则不加。

vector<int> get_divisors(int x)
{
	vector<int>res;
	for (int i = 1; i <= x / i; i++)
	{
		if (x % i == 0)
		{
			res.push_back(i);
			if (x != x / i)res.push_back(x / i);
		}
	}
	sort(res.begin(), res.end());
	return res;
}

 完整实现

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
vector<int> get_divisors(int x)
{
	vector<int>res;
	for (int i = 1; i <= x / i; i++)
	{
		if (x % i == 0)
		{
			res.push_back(i);
			if (x != x / i)res.push_back(x / i);
		}
	}
	sort(res.begin(), res.end());
	return res;
}
int main()
{
	int x;
	cout << "请输入一个整数:" << endl;
	cin >> x;
	vector<int>res = get_divisors(x);
	cout << "该整数的所有约数为:" ;
	for (auto num : res)
	{
		cout << num << " ";
	}
	return 0;
}

    

 3.欧几里得算法

     欧几里得算法又叫辗转相除法,用于计算两个非负整数a和b的最大公约数。

     两个整数的最大公约数是能够同时整除它们的最大正整数。欧几里得算法的原理是:两个整数的最大公约数等于其中较小的数和两数相除余数的最大公约数。怎么来证明呢?方法如下:

设a、b且a>b,则有a=kb+r(k,r>0)
设a,b最大公约数为v,则有a=xv,b=yv(x,y>0)
                  所以r=a-kb=xv-kyv=(x-ky)v,得到r整除v
设b,r最大公约数为v,则有b=mv,r=nv(m,n>0)
                  所以a=kb+r=kmv+nv=(km+n)v,得到a整除v
所以(a,b)的最大公约数=(b,r)的最大公约数=(b,a%b)的最大公约数

3.1.代码实现

int gcd(int a,int b)
{
   return b?gcd(b,a%b):a;
}

3.2.演示

#include<stdio.h>
int gcd(int a, int b)
{
	return b ? gcd(b, a % b) : a;
}
int main()
{
	int a, b;
	printf("请输入两个整数:");
	scanf_s("%d %d", &a, &b);
	printf("a和b的最大公约数为:%d", gcd(a, b));
	return 0;
}

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

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

相关文章

LSTM和GRU vs 循环神经网络RNN

1、考虑下列三种情况下&#xff0c;对比一下普通RNN的表现和LSTM和GRU表现&#xff1a; &#xff08;1&#xff09;早期观测值对预测未来观测者具有非常重要的意义。 考虑一个极端情况&#xff0c;其中第一个观测值包含一个校验和&#xff0c; 目标是在序列的末尾辨别校验和是…

Scala安装

Scala安装使用 windows安装,配置环境变量 以下载Scala2.11为例&#xff0c;操作在Windows中安装Scala。 官网下载scala2.11&#xff1a;All Available Versions | The Scala Programming Language下载好后安装。双击msi包安装,记住安装的路径。配置环境变量&#xff08;和配…

精品Nodejs实现的微信小程序的校园跑腿系统-快递收取件

《[含文档PPT源码等]精品Nodejs实现的微信小程序的校园跑腿系统[包运行成功]》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功&#xff01; 软件开发环境及开发工具&#xff1a; 操作系统&#xff1a;Windows 10、Windows 7、Windows 8 …

C++:list增删查改模拟实现

C:list增删查改模拟实现 前言一、list底层双链表验证、节点构造1.1 list底层数据结构1. 2 节点构造 二、迭代器封装实现&#xff08;重点、难点&#xff09;2.1 前置说明2.2 迭代器实现 三、list实现3.1 基本框架3.2 迭代器和const迭代器3.2 构造函数、析构函数、拷贝构造、赋值…

解决FTP传输慢的问题(ftp传输慢为什么)

在企业运营中&#xff0c;使用FTP进行文件或数据传输是相当普遍的做法。尽管FTP是一种传统的文件传输工具&#xff0c;但在实际应用中&#xff0c;我们可能会面临传输速度缓慢的问题&#xff0c;这不仅影响工作效率&#xff0c;还浪费时间。为了解决这一问题&#xff0c;我们可…

Vue中Render函数、_ref属性、_props配置的使用

Render函数 由于导入的vue为vue.runtime.xxx.js是运行版的vue.只包含&#xff1a;核心功能&#xff1a;没有模板解析器 完整版的Vue为vue.js包含&#xff1a;核心功能模板解析器 vue.runtime.esm.js中的esm为ES6的模块化 //导入的vue并非完整的vue&#xff0c;这样做的好处是…

实战:朴素贝叶斯文本分类器搭建与性能评估

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

Druid源码阅读-DruidStatInterceptor实现

上次我们在druid-spring-boot-starter里面看到有一个DruidSpringAopConfiguration的配置类&#xff0c;然后引入了DruidStatInterceptor这样一个切面逻辑。今天我们就来看一下这个类的实现。 DruidStatInterceptor 这个类的包路径下入com.alibaba.druid.support.spring.stat。…

服务器代码上传到gitlab

服务器代码上传到gitlab 安装Git工具linux&#xff1a;安装Git&#xff0c;使用自带的源安装 yum install git生成密钥文件&#xff1a;使用ssh-keygen生成密钥文件.ssh/id_rsa.pub ssh-keygen 使用cat命令查看密钥&#xff0c;将下面的密钥复制一份 在gitlab上建立一个和…

2023年12月16日~12月22日(自适应反馈机制下基于卷积神经网络的高清晰反射波反演算法:CNN-RWI)

标题&#xff1a;Adaptive Feedback Convolutional-Neural-Network-Based High-Resolution Reflection-Waveform Inversion 全波形反演&#xff08;FWI&#xff09;是一种非线性拟合观测地震记录从而获得高清晰速度模型的最优化算法。FWI能够通过拟合浅层初至波和反射波获得较准…

浅学JWT跨域认证

Json Web令牌简称JWT 由HeaderPayloadSignature组成 Header JWT头是一个描述JWT元数据的JSON对象&#xff0c;alg属性表示签名使用的算法&#xff0c;默认为HMAC SHA256&#xff08;写为HS256&#xff09;&#xff1b;typ属性表示令牌的类型&#xff0c;JWT令牌统一写为JWT。…

湘沪数字产业(上海)协同创新中心正式启动!

前言 随着全球化的加速和市场竞争的日益激烈&#xff0c;产业协作已成为推动科技创新和经济发展的重要手段。在创新驱动战略的推动下&#xff0c;全国形成了在科创核心城市建设科创中心的浪潮&#xff0c;旨在充分利用不同区域的产业优势&#xff0c;加强产业协作&#xff0c;…

BFS解决FloodFill算法相关leetcode算法题

文章目录 1.图像渲染2.岛屿数量3.岛屿的最大面积4.被围绕的区域 1.图像渲染 图像渲染 class Solution {int dx[4] {0,0,1,-1};int dy[4] {1,-1,0,0}; public:vector<vector<int>> floodFill(vector<vector<int>>& image, int sr, int sc, int…

计算机视觉技术-使用图像增广进行训练

让我们使用图像增广来训练模型。 这里&#xff0c;我们使用CIFAR-10数据集&#xff0c;而不是我们之前使用的Fashion-MNIST数据集。 这是因为Fashion-MNIST数据集中对象的位置和大小已被规范化&#xff0c;而CIFAR-10数据集中对象的颜色和大小差异更明显。 CIFAR-10数据集中的前…

【MIMO 从入门到精通】[P4]【MIMO Communications】

前言&#xff1a; Explains the main approaches to multi-input multi-output (MIMO) communications, including Beamforming, Zero Forcing, and MMSE. * Note that at the 9:19min mark, I made a slight "voice typo", where I should have said: "you nee…

AI进化太快了!Stability AI开源视频生成大模型Stable Video Diffusion

对于 Stable Diffusion&#xff0c;想必读者朋友们对此都不陌生。 自 Stability AI 公司发布 SD&#xff08;全称&#xff1a;Stable Diffusion) 以来&#xff0c;受到了很多人的喜爱。 SDXL 效果 随后技术升级&#xff0c;又发布了 SDXL&#xff0c;名字很有喜感&#xff0c…

计网04-网络传输介质

物理层&#xff08;网卡、传输介质&#xff09; 一、信号 &#xff11;、概念 进行网络通信在线缆中传输的就是信号&#xff0c;网线传输电信号&#xff0c;光纤传输光信号。 信息&#xff1a;对现实事物存在的某种认识数据&#xff1a;描述某些属性的具体的量子&#xff0…

C/C++学习笔记十三 C++中的重载运算符

1、什么是运算符重载&#xff1f; 运算符重载是 C 中的一项功能&#xff0c;使运算符&#xff08;例如 、- 等&#xff09;能够处理用户定义的数据类型。这种机制称为编译时多态性&#xff0c;并提供了为不同数据类型定制运算符行为的优点。 例如&#xff0c;我们可以重载“”运…

基于SpringBoot实现一个可扩展的事件总线

基于SpringBoot实现一个可扩展的事件总线 前言 在日常开发中&#xff0c;我们经常会用到事件总线&#xff0c;SpringBoot通过事件多播器的形式为我们提供了一个事件总线&#xff0c;但是在开发中我们经常会用到其他的实现&#xff0c;比如Guava、Disruptor的。我们将基于Spri…