一、试除法求约数

主要思想:由于当n/a=b时,a和b都是n的约数,即约数总是成对出现,可以在一次循环中同时找到i和n/i两个约数,只需要循环n/i次就能找到所有约数。

例题:求一个数的所有约数,并将它们按大小排序。

vector<int> get_divisors(int n){vector<int> res;for(int i=1;i<=n/i;i++){//只循环n/i次if(n%i==0){//找到约数res.push_back(i);if(n/i!=i) res.push_back(n/i);//存入与i成对的那个约数}}sort(res.begin(),res.end());//排序return res;
}

二、约数个数

主要思想:将数n分解成  ,数n的所有约数个数即为的所有组合个数,可以用公式……求得。而分解过程即为在求一个数的所有质因子(详见【算法基础14】)算法上稍加改动,在存储质因子的同时存储该质因子的幂。

例题:给出由n个数,求它们的乘积的约数个数。

#include<iostream>
#include<algorithm>
#include<vector>
#include<unordered_map>
using namespace std;typedef long long LL;int main(){int n;cin>>n;unordered_map<int,int> primes;//用哈希图存储质因子和它对应的幂while(n--){int x;cin>>x;for(int i=2;i<=x/i;i++){//求质因子while(x%i==0){x/=i;primes[i]++;//该p对应的a++}            }if(x>1) primes[x]++;//处理大于x/i的那个质因子}LL res=1;for(auto prime:primes){res=res*(prime.second+1);//代入公式计算} cout<<res<<endl;return 0;
}

三、约数的和

主要思想:,约数之和即为的组合个数的和,可以j将约数之和分解成

例题:给出由n个数,求它们的乘积的约数之和。

#include<iostream>
#include<algorithm>
#include<vector>
#include<unordered_map>
using namespace std;typedef long long LL;int main(){int n;cin>>n;unordered_map<int,int> primes;while(n--){int x;cin>>x;for(int i=2;i<=x/i;i++){//分解while(x%i==0){x/=i;primes[i]++;}           }if(x>1) primes[x]++;}LL rsum=1;for(auto prime:primes){   int p=prime.first,a=prime.second;//pi和aiLL t=1;while(a--) t=t*p+1;//循环a次后,得p0+p1+...+p6sum=sum*t;} cout<<sum<<endl;return 0;
}

四、辗转相除法(欧几里得算法)求最大公约数

主要思想:求a和b的最大公约数可以转化为求b和a%b的最大公约数,不断递归转化到求a和0的最大公约数,则答案为a。

例题:给出两个数,求它们的最大公约数。

int gcd(int a,int b){return b?gcd(b,a%b):a;//如果b不为0,则返回gcd(b,a%b),否则返回a
}

五、扩展欧几里得算法

主要思想:由裴蜀定理(对于任意正整数a,b,一定存在非零整数x,y,使得ax+by=a和b的最大公约数。)求a和b的构造系数x,y。

  推导过程:

​​​​​​​      

  代码实现:

int exgcd(int a,int b,int &x,int &y){if(!b){x=1,y=0;//b=0时,a*1+0=areturn a;}int d=exgcd(b,a%b,y,x);y-=a/b*x;//由推导更新系数return d;
}

应用:求解同余方程。同余方程可以转化为裴蜀定理的形式,只要b是a和m的最大公约数的倍数,则同余方程一定有解,代入扩展欧几里得算法,x*(b/d)%m即为同余方程的解。

​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​

【算法基础15】如何求约数?约数个数?约数之和?最大公约数?相关推荐

  1. 算法基础2:求abc的全排列

    算法基础:求abc的全排列有几种方式 采用递归的方式,对abc的排列进行解析 先上代码块: public class Demo2 {public static void main(String[] a ...

  2. 质因数 求约数 c语言,【初等数论】 求一个数有多少约数及所有约数之和、分解质因数...

    今天做题遇见,于是就搜了一下,于是就有了这篇文章.(其实我不知道原理....Orz)我觉得分解质因数的最优算法应该不是我这篇文章中的这个.....谁有好的算法可以给我说一下,谢谢. 1.有多少个约数: ...

  3. php算法求出一个数可以被分解成多少个_程序员的算法趣题

    计算机的世界每天都在发生着深刻的变化.新操作系统的发布.CPU性能的提升.智能手机和平板电脑的流行.存储介质的变化.云的普及--这样的变化数不胜数. 在这样日新月异的时代中,"算法" ...

  4. php算法求出一个数可以被分解成多少个_小学奥数必须掌握的30个知识模块汇总...

    关注成长教育  解决学习困惑 点击蓝字关注,与全国家长比肩同行 1.和差倍问题和差问题 和倍问题 差倍问题已知条件 几个数的和与差 几个数的和与倍数 几个数的差与倍数公式适用范围 已知两个数的和,差, ...

  5. php算法求出一个数可以被分解成多少个_小学数学必考的34个数学重难点公式,赶紧给孩子收藏!...

    34个小学数学重难点公式 1.和差倍问题 2.年龄问题的三个基本特征 ①两个人的年龄差是不变的: ②两个人的年龄是同时增加或者同时减少的: ③两个人的年龄的倍数是发生变化的: 3.归一问题的基本特点 ...

  6. python求极限中有算术平方根如何表达_Python求算数平方根和约数的方法汇总

    Python求算数平方根和约数的方法汇总 一.求算术平方根 a= x=int(raw_input('Enter a number:')) if x >= : while a*a < x: ...

  7. 约数的和及约数的个数

    约数的和及约数的个数 1.约数的个数等于:所有质因数的指数加上1后的乘积; 若一个数分解质因数后为(am)*(bn),其中a,b均为质因数;m,n均为相应质因数的指数. 则约数个数为(m+1)(n+1 ...

  8. 约数定理(约数个数定理,约束和定理)

    约数个数定理: 对于一个大于1正整数n可以分解质因数: 则n的正约数的个数就是 . 其中a1.a2.a3-ak是p1.p2.p3,-pk的指数. 定理简证: 首先同上,n可以分解质因数:n=p1^a1 ...

  9. 3377. 约数的个数

    3377. 约数的个数 求n的约数: a * b=n,如果a不等于b,那么n的约数有a b两个 a * a=n,即a=a,那么n的约数有a一个 按照这种方法可以将时间复杂度降到O(sqrt(a)) / ...

最新文章

  1. 全卷积目标检测:FCOS
  2. 三年程序学习之三:(失业了)
  3. 特使招募-航天三院-智能车竞赛
  4. Spring Boot 解决跨域问题的 3 种方案
  5. POJ2104 K-th Number [分块做法]
  6. uniapp滑动切换tab标签_Web前端,Tab切换,缓存,页面处理的几种方式
  7. 快速地创建快顶尖的医学图像处理控件ImageGear Medical
  8. python实现xmind_Python xmind库(生成框架图)
  9. 15 CO配置-控制-内部订单-维护分配结构
  10. init,service和systemctl的区别
  11. php mysql单引号 双引号_php单引号、双引号与数据库
  12. vscode C++配置opencv
  13. 静态成员对比实例成员(static修饰符解析)
  14. 如何解除国外听QQ音乐网易音乐地区版权限制解除
  15. css loader.net,css-loader style-loader原理探究
  16. 2018最新圣思园JavaSE实地培训系列视频教程
  17. 【网络安全】网络安全期末大题 复习题
  18. 吐血推荐 ▏看完这个我才知道原来PHP应该这样学!大牛的成功是可以复制的(福利派送)
  19. [IOS]整合google map并获取当前位置
  20. 匹兹堡大学计算机科学,匹兹堡大学计算机科学硕士排名第63(2020年TFE Times排名)...

热门文章

  1. 微信抢红包插件 android 8.0,重磅!微信8.0专属红包全量上线!
  2. JS中那些拧巴的概念-原型
  3. const指针与指向const对象的指针
  4. PostgreSQL函数for循环使用
  5. 洛谷P3393逃离僵尸岛
  6. 【闲聊杂谈】深挖IO
  7. Android中下载音视频文件
  8. 我的2010 :得到比失去的多
  9. element中的js弹框效果
  10. 武经七书 ---孙子兵法--孙武[中国]