04 约数

定义:

若整数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.mzph.cn/news/648494.shtml

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

相关文章

在DevEco开发工具中,使用Previewer预览界面中的UI组件

1、在DevEco工具中&#xff0c;点击并展开PreViewer预览器 2、在PreViewer预览器中&#xff0c;点击Tt按钮&#xff08;Inspector&#xff09;切换至组件查看模式 3、在组件查看模式下选择组件&#xff0c;代码呈现选中状态&#xff0c;右侧呈现组件树&#xff0c;右下方呈现组…

ARM 驱动 1.22

linux内核等待队列wait_queue_head_t 头文件 include <linux/wait.h> 定义并初始化 wait_queue_head_t r_wait; init_waitqueue_head(&cm_dev->r_wait); wait_queue_head_t 表示等待队列头&#xff0c;等待队列wait时&#xff0c;会导致进程或线程被休眠&…

倍增算法笔记

主要应用场景 RMQ&#xff1a;区间最值问题 LCA&#xff1a;最近公共祖先问题 RMQ问题——区间最值 如果用数组f[N]存储,用数组a[i][j]表示从第i个数起连续 2^j 个数中的最大值,[i,i 2^j - 1],显然a[i][0] f[i],则很容易得到状态转移方程: a[i][j] max(a[i][j - 1], a[i …

读书笔记-《数据结构与算法》-摘要11[Divide and Conquer - 分治法]

在计算机科学中&#xff0c;分治法是一种很重要的算法。分治法即『分而治之』&#xff0c;把一个复杂的问题分成两个或更多的相同或相似的子问题&#xff0c;再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解&#xff0c;原问题的解即子问题的解的合并。这个思…

电商API接口|爬虫案例|采集某东商品评论信息

前言&#xff1a; 平常大家都有网上购物的习惯&#xff0c;在商品下面卖的好的产品基本都会有评论&#xff0c;当然也不排除有刷评论的情况&#xff0c;因为评论会影响我们的购物决策。今天主要分享用pythonre正则表达式获取京东商品评论。API接口获取京东平台商品详情SKU数据…

11k+ star 一款不错的笔记leanote安装教程

特点 支持普通模式 支持markdown模式 支持搜索 安装教程 1.安装mongodb 1.1.下载 #下载 cd /opt wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.1.tgz 1.2解压 tar -xvf mongodb-linux-x86_64-3.0.1.tgz 1.3配置mongodb环境变量 vim /etc/profile 增…

电脑可以连接wifi,甚至可以qq聊天,但就是不能用浏览器上网,一直显示未检测出入户网线的解决方案

今天回到家&#xff0c;准备办公却发现电脑可以连接wifi&#xff0c;甚至可以qq聊天&#xff0c;但就是不能用浏览器上网&#xff0c;一直显示未检测出入户网线的解决方案&#xff0c;小白也可以看懂 以下有几种解决方案&#xff0c;不妨都试试&#xff0c;估计可以解决95%的相…

C#-前后端分离连接mysql数据库封装接口

C#是世界上最好的语言 新建项目 如下图所示选择框红的项目 然后新建 文件夹 Common 并新建类文件 名字任意 文件内容如下 因为要连接的是mysql数据库 所以需要安装 MySql.Data.MySqlClient 依赖; using MySql.Data.MySqlClient; using System.Data;namespace WebApplication1.…

Django 为应用定制化admin独立后台

定制后界面 在应用目录下找到admin.py并进行编辑 from django.contrib.admin import AdminSite from .models import Question,Choiceclass PollsAdminSite(AdminSite):site_header"Admin-site-header"site_title"admin-site-title"index_title"admi…

Conda 使用environment.yml创建一个新的Python项目

Conda系列&#xff1a; 翻译: Anaconda 与 miniconda的区别Miniconda介绍以及安装Conda python运行的包和环境管理 入门Conda python管理环境environments 一 从入门到精通Conda python管理环境environments 二 从入门到精通Conda python管理环境environments 三 从入门到精通…

Ansible自动化运维(三)Playbook 模式详解

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; &#x1f40b; 希望大家多多支…

未来已来:OJAC诚邀您与张立赛博士解锁GPT Store的无限潜力!

亲爱的伙伴们&#xff01;本月31日晚上8:30&#xff0c;我们近屿智能OJAC的培训讲师——哈尔滨工业大学博士毕业生、前之江实验室资深研究员张立赛博士&#xff0c;将为我们带来一场深度技术更新讲座&#xff0c;深度探讨GPT Store的最新发展。 本次讲座将从GPT Store的基本概念…

什么是互联网打工人都需要知道的API?电商API是什么?

我们生活在一个科技主导的世界。在这里&#xff0c;数据无处不在。作为许多不同产品的用户&#xff0c;我们所追寻的不再是某一个能将工作完成的最佳产品&#xff0c;而是一个不仅能有效完成工作&#xff0c;同时也与我们所使用的其他工具完美兼容的产品。因此&#xff0c;了解…

欧氏、曼哈顿、马氏距离

马氏距离&#xff08;Mahalanobis Distance&#xff09;、欧氏距离&#xff08;Euclidean Distance&#xff09;、曼哈顿距离&#xff08;Manhattan Distance&#xff09;是常用的距离度量方式&#xff0c;它们在数据分析、模式识别、聚类等领域中经常被使用。 欧氏距离&#…

3D建模素材网站的特点有哪些?

3D建模素材网站的特点主要包括丰富多样的模型种类、高质量的模型、实时预览功能、易于使用、价格合理以及社区互动等。这些特点使得3D建模素材网站成为设计师们不可或缺的资源之一&#xff0c;帮助他们快速高效地完成设计工作。 那么3D建模素材网站的特点有哪些? 1、模型种类丰…

【漏洞复现】上海冰峰ICEFLOW VPN信息泄露漏洞

Nx01 产品简介 上海冰峰计算机网络技术有限公司是国内VPN、流量管理、行为管理、链路负载均衡、下一代防火墙设备供应商和IT价值解决方案提供商。冰峰网络reporter系统是一套数据报表管理系统。 Nx02 漏洞描述 上海冰峰计算机网络技术有限公司ICEFLOW VPN Router系统存在信息泄…

eNSP学习——利用单臂路由实现VLAN间路由

目录 原理概述 实验内容 实验目的 实验步骤 实验拓扑 实验编址 配置步骤 创建VLAN并配置Access、Trunk接口 配置路由器子接口和IP地址 配置路由器子接口封装VLAN 测试结果 原理概述 在以太网中&#xff0c;通常会使用VLAN技术隔离二层广播域来减少广播的影响&#…

langchain + hugginface入门体验

简介 本文记录一次使用langchain调用openai并部署在huggingface上的经历 安装环境依赖 我的python版本是3.9 pip install langchain pip install openai代码 app.py import streamlit as st # from langchain_community.chat_models import ChatOpenAI from langchain_openai …

w23靶场安装

一、实验环境 服务器&#xff1a;phpstudyv8.1.13 靶场&#xff1a;Bees、sdcms、cpms、khbc二、实验目的 提供一个靶场环境 三、实验步骤 bees靶场安装 1.启动小皮的apache和mysql 2.在小皮V8.1.1.3版本上创建bees网站&#xff0c;选择的php版本最好在5.x&#xff0c;不…

聚道云软件连接器:打通金蝶云星空与招商银行CBS,提升企业财务和银行业务效率

【客户介绍】 某企业是一家从事电子商务的企业&#xff0c;随着业务的不断扩大&#xff0c;对于财务管理和银行业务的需求也越来越高。该企业希望能够实现财务和银行业务的自动化处理&#xff0c;提高工作效率。由于业务的不断发展&#xff0c;企业面临着越来越多的资金管理挑…