基础数论一:判定质数和求约数相关

news2025/3/11 3:35:50

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/1337535.html

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

相关文章

day42 1226

作业1&#xff1a; #include <iostream>using namespace std;namespace myspace {string str; }int length(string str) {//char *p &str.at(0);const char *p str.data();int count 0;while (*p ! 0) {p;count;}return count; } int main() {getline(cin,myspac…

javaweb--实验十 --期末复盘

实验十 JDBC连接MySQL 本次实验没有代码补全&#xff0c;以下都是完整过程&#xff0c;详细关注连接过程的问题 一、实验目的&#xff1a; 1、掌握JDBC连接数据库的一般操作。 2、理解JavaBean的基本作用。 3、理解分层设计的思想。 二、 实验内容&#xff1a; 实现学生信…

黑马头条-day10-xxl-job热点文章计算

目录 一.需求分析 实现思路 定时计算 定时任务框架-xxljob 二. 学习目录 分布式任务调度 1 xxl-Job简介 2 XXL-Job-环境搭建 2.1调度中心环境要求 2.2源码仓库地址 2.3 初始化“调度数据库” 2.4配置部署“调度中心” 3.配置部署调度中心-docker安装 4.简单实例 创建…

SpringBoot - Maven 打包合并一个胖 JAR 以及主项目 JAR 依赖 JAR 分离打包解决方案

问题描述 <plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.1.18.RELEASE</version><configuration><!--<classifier>exec</classifier>--…

2023上海国际计算生物学创新大赛——药物筛选AI算法“凌越”挑战赛,等你来战!

作为一门新兴的交叉学科&#xff0c;计算生物学具有巨大的应用潜力和市场价值。近年来&#xff0c;各国高度重视计算生物学的发展&#xff0c;尝试利用计算生物学的方法和技术破解生物医药行业的难题。 为进一步推动计算生物学发展&#xff0c;落实 《上海市计算生物学创新发展…

磷酸除杂,t-42离子交换树脂的应用

随着工业的发展&#xff0c;磷酸作为一种重要的化工原料&#xff0c;被广泛应用于肥料、饲料、洗涤剂、食品添加剂等领域。然而&#xff0c;磷酸中常常含有杂质&#xff0c;如钠离子、铁离子等&#xff0c;这些杂质会影响磷酸的使用效果&#xff0c;甚至对人体健康造成危害。因…

SpringSecurity6 | 退出登录后的跳转

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: 循序渐进学SpringSecurity6 ✨特色专栏: MySQL学习 🥭本文内容: SpringSecurity6 | 登录失败后的JSON处理 📚个人知识库: Leo知识库,…

upload-labs Pass-03(黑名单验证,特殊后缀)问题纠正

php任何后缀名解析 背景&#xff1a;为了验证php解析不依靠后缀名&#xff0c;可以是任何后缀名&#xff0c;纠正upload-labs Pass-03&#xff08;黑名单验证&#xff0c;特殊后缀&#xff09;里所说的几个固定的后缀名理论是错误的。1 部署1.1 环境准备1.1.1 系统、内核&#…

Matlab:解非线性方程组

1、基于问题求解非线性方程组 例&#xff1a; xoptimvar(x,2); %将x定义为一个二元素优化变量 eq1exp(-exp(-(x(1)x(2))))x(2)*(1x(1)^2); %创建第一个方程作为优化等式表达式 eq2x(1)*cos(x(2))x(2)*sin(x(1))1/2; %创建第二个方程作为优化等式表达式 probe…

Vue实现响应式布局

前提准备&#xff1a;响应式布局有两种方法&#xff0c;看自己想要哪种。 方法一&#xff1a;百分比 用百分比去写元素的宽度&#xff0c;然后让子元素撑起父元素的高度 .parent {width: 50%; }.child {width:100%;height:100px; } 方法二&#xff1a;vh、vw vw、vh是基于视…

jQuery: 整理5---删除元素和遍历元素

1. 删除元素 span{color: white;padding: 8px;margin: 5px;float: left;}.green {background-color: green;}.blue {background-color: blue;}<span class"green">green</span><span class"blue">blue</span><span class"…

Java反序列化漏洞-CC6利用链分析

CC链之最好用的利用链CC6分析 经过之前对CC1链和URLDNS链的分析&#xff0c;现在已经对反序列化利用链有了初步的认识&#xff0c;这次来分析一个最好用的CC利用链——CC6。 为什么CC6是最好用的CC利用链&#xff0c;因为CC6不限制jdk版本&#xff0c;只要commons collection…

调优-mybatis saveBatch

一条一条插入&#xff1a; 批量插入&#xff1a; 批量插入-优化&#xff1a; 在url配置 # rewriteBatchedStatementstrue url: jdbc:mysql://localhost:3306/xi_ning?characterEncodingutf-8&serverTimezoneUTC&rewriteBatchedStatementstruerewriteBatchedState…

前端---盒子模型

1. 盒子模型的介绍 所谓的盒子模型就是把HTML页面的元素看作一个矩形盒子&#xff0c;矩形盒子是由内容(content)、内边距(padding)、边框(border)、外边距(margin)四部分组成。 盒子模型示意图如下&#xff1a; 2. 盒子模型相关样式属性 盒子的内容宽度(width)&#xff0c;…

vue子组件实时获取父组件的数据

其实在vue中实现子组件实时获取父组件的数据有6种方式. 1、props/$emit&#xff1b; 2、子组件向父组件传值&#xff08;通过事件形式&#xff09;&#xff1b; 3、使用vuex&#xff1b; 4、使用$attrs/$listeners; 5、provide/inject&#xff1b; 6、$parent/$children与ref。…

2024年了,造『论文解读』公众号,买个agent就够了……

大家好我是二狗&#xff0c;是夕小瑶科技说编辑部的一名作者。 我平时主要负责写AI资讯报道的文章。 二狗我在「赛博马良」平台方买了AI员工之后每次都非常顺利地在第一时间精准抓到爆&#x1f525;的选题。 比如当时Sam Altman被开除的事件&#xff0c;二狗我几乎是全网首发…

三甲基碘硅烷,预计未来几年市场将以稳定的速度增长

三甲基碘硅烷是一种无色透明液体&#xff0c;广泛用作有机化学中的试剂。它用于制备多种有机化合物&#xff0c;包括药物、农用化学品和特种化学品。由于最终用途行业的需求不断增加&#xff0c;预计未来几年全球碘三甲基硅烷市场将以稳定的速度增长。 全球碘三甲基硅烷市场分为…

15 款Python编辑器的优缺点,别再问我“选什么编辑器”

本文介绍了多个 Python IDE&#xff0c;并评价其优缺点。读者可以参考此文列举的 Python IDE 列表&#xff0c;选择适合自己的编辑器。 写 Python 代码最好的方式莫过于使用集成开发环境&#xff08;IDE&#xff09;了。它们不仅能使你的工作更加简单、更具逻辑性&#xff0c;…

词法语法语义分析程序设计及实现,包含出错提示和错误恢复

词法说明 (1)关键字 main, int, char, if, else, for, while, void (2)运算符 - * / < < > > ! (3)界符 ; ( ) { } (4)标识符 ID letter(letter|digit)* (5)整型常数 NUM digit digit* (6)空格 ‘ ‘ ‘\n’ ‘\r’ ‘\t’ 空格用来分隔ID,NUM,运算符,界…

如何在推文里添加下载链接

电脑上有一个文件&#xff0c;希望通过公众号推文分享给读者&#xff0c;我们该如何操作呢&#xff1f;大家都知道&#xff0c;公众号并没有提供相应的附件功能。 这些其实是很常见的需求&#xff0c;在公众号上发布招聘信息、招投标信息、宣传文章、政策解读的时候&#xff0…