04 约数

news2024/11/18 1:25:48

定义:

若整数n除以整数d的余数为0,即d能够整除n,n是d的倍数,记作d|n.

通过质因子求一个数的约数

如果n可以表示成

n={p_1}^{c_1}{p_2}^{c_2}......{p_k}^{c_k}  其中eq?p_1%20p_2%20p_3....p_k均为n的质因子

因为对于任意一个质因子eq?p_i都有选0个 选1个 选2个....选eq?c_i个共c_i+1种可能,

n的约数个数为

f(n)=(eq?c_1+1)(eq?c_2+1)......(c_k+1)=\prod_{i=1}^{k}(c_i+1)

 

所有约数的和为:

 (p_1^0+p_1^1+p_1^2+...+p_1^{c_1})(p_2^0+p_2^1+p_2^2+...+p_2^{c_2})...(p_k^0+p_k^1+p_k^2+...+p_k^{c_k})=\prod_{i=1}^{k}(\sum_{j=0}^{c_i}p_i^{j})

#include<bits/stdc++.h>

using namespace std;
const int N=1e6+10;

int prime[N],idx;
bool st[N];
//线性筛求1-n的所有质数
void init(int n){
	for(int i=2;i<=n;i++){
		if(!st[i]) prime[++idx]=i;
		for(int j=1;prime[j]*i<=n;j++){
			st[prime[j]*i]=true;
			if(i%prime[j]==0) break;			
		}
	}
}
//nprime存所有的质数,cnt存质数的个数
int nprime[N],cnt[N],k; 
//枚举每一个质数及质数的个数求出所有的约数
void dfs(int i,int d){
	if(i>k){
		cout<<d<<" ";
		return;
	}
	int p=1;
	for(int j=0;j<=cnt[i];j++){
		dfs(i+1,d*p);
		p*=nprime[i];
	}
}
int main(){
	init(N-1);
	int n;
	cin>>n;
	//找到所有的质数及个数
	for(int i=1;prime[i]<=n;i++){
		int p=prime[i];
		if(n%p==0) nprime[++k]=p;
		while(n%p==0) cnt[k]++,n/=p;
	}
	int sum=1;
	//根据公式求解质数的个数
	for(int i=1;i<=k;i++){
		sum*=cnt[i]+1;
	}
	cout<<"约数的个数为"<<sum<<endl;
	long long mul=1;
	//根据公式求所有质数的和
	for(int i=1;i<=k;i++){
		sum=1;
		long long p=1;
		for(int j=1;j<=cnt[i];j++){
			p*=nprime[i];
			sum+=p;
		}
		mul*=sum;
	}
	cout<<"约数的和为:"<<mul<<endl;
	cout<<"约数分别是:";
	dfs(1,1);
	
	return 0;
}

通过试除法求一个数的约数

对于n的约数d≤\sqrt{n},那么n/d≥\sqrt{n}也是n的约数,n的约数都是成对出现的,有一个≥\sqrt{n}的就会有一个≤\sqrt{n}的约数,对于完全平方数n,\sqrt{n}是单独出现的,其他都是成对出现的。

因此只要扫描1~\sqrt{n}的所有数d,如果d能够整除n,那么就能找到两个约数d和n/d,时间复杂度为O(\sqrt{n})。

#include<bits/stdc++.h>

using namespace std;
int n;
int factor[2000],idx;
int main(){
	
	cin>>n;
	for(int i=1;i<=n/i;i++){
		if(n%i==0){
			factor[++idx]=i;
			if(i!=n/i) factor[++idx]=n/i;
		}
	}
	//n的约数有idx个,约数都保存在factor中
	for(int i=1;i<=idx;i++) cout<<factor[i]<<" ";
	return 0;
}

试除法的推论: n的约数的个数上界为 2\sqrt{n}

通过倍数法求解数列的约数

对于一个1~n的序列在求解每个数的约数时,如果通过试除法复杂度O(n\sqrt{n})较高,观察到在求解每个数的约数时,都会重复枚举很多不是约数的数,如果我们只关注能够整除的约数,通过约数去找相应的数,而不是数去找约数,就会大大减少枚举的复杂度。

#include<bits/stdc++.h>

using namespace std;
const int N=500010;

vector<int> factor[N];

int n;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n/i;j++){
			factor[i*j].push_back(i);
		}
	}
	for(int i=1;i<=n;i++){
		cout<<i<<":";
		for(auto p:factor[i]){
			cout<<p<<" ";
		}
		cout<<endl;
	}
	return 0;
}

时间复杂度为: O(n/1+n/2+n/3+....+n/n)=O(nlogn)

使用倍数法求解区间数的约数,待验证

#include<bits/stdc++.h>

using namespace std;
const int N=500010;

vector<int> factor[N];

int l,r;
int main(){
	cin>>l>>r;
	for(int i=1;i<=r/i;i++){
		int s=ceil(l*1.0/i)*i;
		for(int j=s;j<=r;j+=i){
			factor[j-l].push_back(i);
			factor[j-l].push_back(j/i);
		}
	}
	for(int i=0;i<=r-l;i++){
		cout<<i+l<<":";
		sort(factor[i].begin(),factor[i].end());
		for(int j=0;j<(int)factor[i].size();j++){
			if(j==0) cout<<factor[i][j]<<" ";
			else if(factor[i][j]!=factor[i][j-1]) cout<<factor[i][j]<<" ";
		}
		cout<<endl;
	}
	return 0;
}

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

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

相关文章

C++ STL库详解:list

目录 一、list简介 二、list的使用 2.1list的构造 2.2list iterator迭代器的使用 2.3list element access 2.4list 常见接口 2.5迭代器失效 三、list与vector的对比 一、list简介 1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器…

腾讯云轻量应用服务器Docker如何一键搭建属于自己的幻兽帕鲁服务器?

幻兽帕鲁/Palworld是一款2024年Pocketpair开发的开放世界生存制作游戏&#xff0c;在帕鲁的世界&#xff0c;玩家可以选择与神奇的生物“帕鲁”一同享受悠闲的生活&#xff0c;也可以投身于与偷猎者进行生死搏斗的冒险。而帕鲁可以进行战斗、繁殖、协助玩家做农活&#xff0c;也…

【机器学习300问】19、深度学习和机器学习什么关系?

之前的文章都聚焦在传统的机器学习上&#xff0c;作为入门&#xff0c;学了许多机器学习的基础。往后的文章我会穿插着机器学习和深度学习的内容进行&#xff0c;所有有必要在这里先说下两者的关系。 一、从范围上讲 深度学习和机器学习都是人工智能的一个子领域&#xff0c;它…

杰理-修改蓝牙版本5.4

杰理-修改蓝牙版本5.4 #define BLUETOOTH_CORE_SPEC_54 0x0dextern void set_bt_version(u8 version); set_bt_version(BLUETOOTH_CORE_SPEC_54); //蓝牙版本5.4

Vscode配置python代码开发

文章目录 1. 配置python运行环境2. 常用插件说明3. Vscode配置文件说明3.1 setting.json配置说明3.2 launch.json配置说明 4. 远程开发5. 其他配置 1. 配置python运行环境 安装python插件&#xff1a;点击VSCode左侧边栏中的扩展图标&#xff08;或按 CtrlShiftX&#xff09;&a…

即时设计好用吗?即时设计都有什么优势?

即时设计是否易于使用&#xff1f;即时设计有哪些易于使用的功能&#xff1f;假如你在寻找一个免费的Sketch 或者网页版本 PS&#xff0c;那么「即时设计」这是个不错的选择。这个云端 UI 设计工具允许您在不占用计算机内存的情况下使用任何设备。它可以快速存储您的设计文件&a…

AI教我学编程之SQL Server常见指令以及数据类型

前言 今天在工作的过程中&#xff0c;遇到了许多常见的属性&#xff0c;在此做下记录&#xff0c;方便以后查询 目录 SQL Server 常见指令 对话AI 光有概念怎么行 阶段总结 SQL Server关键字 边学边练 数据类型 看图说话 对话AI 数据类型我知道 括号里的神秘数字 疑问 边练…

Linux sudo与/etc/sudoers

sudo介绍 sudo命令可以让普通用户在执行需要超级用户权限的命令时&#xff0c;临时提升为超级用户。例如&#xff0c;普通用户可以使用sudo执行系统管理任务&#xff0c;如安装软件、修改系统配置等。访问控制&#xff1a;sudo命令通过sudoers文件中的配置&#xff0c;可以对用…

企业软件项目成果-图像识别

下面图像识别仅仅使用了OpenCV库而已&#xff0c;并没有涉及深度学习、机器学习。 整盘样本的拍照识别结果&#xff08;识别准确率达100%&#xff09;&#xff1a; 宫颈刷图像识别的测试结果&#xff08;识别准确率达100%&#xff09;&#xff1a;

基于51单片机的智能烘干机设计

基于51单片机的智能烘干机设计[proteus仿真] 温湿度检测系统这个题目算是课程设计和毕业设计中常见的题目了&#xff0c;本期是一个基于51单片机的智能烘干机设计 需要的源文件和程序的小伙伴可以关注公众号【阿目分享嵌入式】&#xff0c;赞赏任意文章 2&#xffe5;&#x…

基于springboot在线学习平台源码和论文

在Internet高速发展的今天&#xff0c;我们生活的各个领域都涉及到计算机的应用&#xff0c;其中包括学习平台的网络应用&#xff0c;在外国学习平台已经是很普遍的方式&#xff0c;不过国内的管理平台可能还处于起步阶段。学习平台具有学习信息管理功能的选择。学习平台采用ja…

jetson-inference----docker内运行分类任务

系列文章目录 jetson-inference入门 jetson-inference----docker内运行分类任务 文章目录 系列文章目录前言一、进入jetson-inference的docker二、分类任务总结 前言 继jetson-inference入门 一、进入jetson-inference的docker 官方运行命令 进入jetson-inference的docker d…

C++PythonC# 三语言OpenCV从零开发(2):教程选择

文章目录 相关专栏前言视频教学和官方文档视频教程OpenCV 官方教程最终选择我的最终选择 相关专栏 C&Python&Csharp in OpenCV 前言 OpenCV 有官方的教程和简单的视频教程&#xff1a; OpenCV 官方教程 B站也有相关的视频教学 OpenCV4 C 快速入门视频30讲 - 系列合集 …

使用Ollama本地部署大模型

Ollama 是一个简明易用的本地大模型运行框架&#xff0c;目前已经有 32 K star。随着围绕着 Ollama 的生态走向前台&#xff0c;更多用户也可以方便地在自己电脑上玩转大模型了&#xff0c;使用 Ollama 本地部署大模型在 mac 上尤其简单 GitHub地址&#xff1a;https://github…

[每日一题] 01.25 - 子数整数

子数整数 k int(input()) flag False for i in range(10000,30001):a,b,c [int(str(i)[j:j 3]) for j in range(3)]if a % k 0 and b % k 0 and c % k 0:print(i)flag Trueif not flag:print(No)

文旅AI交互数字人,提升景区数字化导览服务体验

随着数字化的普及&#xff0c;文化旅游逐渐走向数字化&#xff0c;通过数字人技术手段对文化旅游资源进行整合与开发。 AI交互数字人可以部署于交互式终端设备和移动端&#xff0c;可以为游客提供“面对面”的语音交互&#xff0c;提供路径规划、游览路线推荐、景点讲解等服务&…

[小程序]页面跳转

一、页面跳转 1.声明式导航 使用<navigate>组件实现&#xff08;固定式&#xff09;&#xff0c;需要指定url属性(跳转位置)和open-type属性(跳转方式) ①跳转tabBar页面 open-type属性必须指定类型为switchTab <navigator url"/pages/index/index" open-t…

golang整合rabbitmq,创建交换机并绑定队列

1,如果要开发消息队列,需要创建交换机和队列,通常有2中方式创建,1种是在面板直接创建 2,第二种就是在代码中创建,这里 展示的是go语言代码中创建rabbitmq package mainimport ("fmt""log""github.com/streadway/amqp" )func main() {// 连接R…

将本地项目打包成docker镜像的流程

前置条件&#xff1a; docker 守护进程已经开启 Python3 项目已经编写完成&#xff0c;且可以在本地正常运行 生成docker images 生成项目需引用的包 pip freeze > requirements.txt 确认目录结构配置dockerfile FROM python:3.9.6#代码添加当前目录所有内容到code文件…

无限学模式-“科研创新的加速器:全面掌握ChatGPT,推动研究方法和工作模式现代化!“

2023年随着OpenAI开发者大会的召开&#xff0c;最重磅更新当属GPTs&#xff0c;多模态API&#xff0c;未来自定义专属的GPT。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义&#xff0c;不亚于互联网和个人电脑的问世。360创始人周鸿祎认为未来各行各业如果不能搭上这班车…