约数个数及证明

从小学数学开始?
什么是约数:如果一个整数能被两个整数整除,那么这两个数是这个数的约数。

一个数的约数的个数=这个数的所有质因子的次数+1的乘积。

例如:48=2^4*3
48的约数的个数=(4+1)*(1+1)=10

证明:(来自权限chairman)

2^0*3^0
2^0*3^1
2^0*3^2
……
2^1*3^0
2^1*3^1
……
2^2*3^0
……
2^x*3^0
……
2^x*3^y
举个栗子:
6
2^0 3^0
2^0 3^1
2^1 3^0
2^1 3^1
——>4
10(2^1*5^1)
2^0 5^0
2^0 5^1
2^1 5^0
2^1 5^1
——>4
12(2^2*3^1)
2^0 3^0
2^0 3^1
2^1 3^0
2^1 3^1
2^2 3^0
2^2 3^1
——>6
根据乘法原理 2一共有x+1个幂 3有y+1个幂 所以就是(x+1)*(y+1)个因子

根据唯一分解定理可知,每个大于1的数一定可以以唯一的方式被分解为若干个素数的乘积。
通过计算发现一个2000000000以内的数字不会有超过12个素因子,数据范围更大的话可以再乘。
计算某个数的约数个数时,先打表预处理出从2开始的12个素数,然后一直除。
以下代码只体现性质,实际处理质因子次数时好像可以用筛法快速解决。

#include<iostream>
#include<cstdio>
using namespace std;
const int maxn=101;
struct node
{int a,k;
}s[maxn];
int n,ans=1;
int main()
{scanf("%d",&n);s[1].a=2,s[2].a=3,s[3].a=5,s[4].a=7,s[5].a=11,s[6].a=13,s[7].a=17,s[8].a=19,s[9].a=23,s[10].a=29,s[11].a=31,s[12].a=37;int x=n;for(int i=1;i<=x;i++){while(x%s[i].a==0){s[i].k++;x/=s[i].a;}}for(int i=1;i<=n;i++){ans*=s[i].k+1;}cout<<ans<<'\n';return 0;
} 

【小算法】求约数个数相关推荐

  1. c语言算法求约数个数,【代码】求一个数的因数和、求优化、顺便也供新人参考算法...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include main() { int n,q,p,m,k=1,sum=0,s[99999]={2},t[99999];//n是输入 ...

  2. 算法——求某个数的质因数

    求某个数的质因数,打印的格式为90=2*3*3*5. 思路为:既然我们求质因数,我们可以利用遍历的方法,用这个数从2开始除直到该数本身寻找他的因数 1.第一个问题:因为数的因数可能重复比如9=3*3. ...

  3. 埃拉托色尼筛选法c语言求最大公约数,用埃拉托色尼筛算法求两个数最大公约数C++的实现...

    #include "stdafx.h" #include "iostream" #include #include //使用埃氏筛选法求最大公约数 void s ...

  4. 【c语言】蓝桥杯算法提高 约数个数

    问题描述 输入一个正整数N (1 样例输入 12 样例输出 6 样例说明 12的约数包括:1,2,3,4,6,12.共6个 #include<stdio.h> #include<ma ...

  5. 蓝桥杯 ADV-98 算法提高 约数个数

    输入一个正整数N 样例输入 12 样例输出 6 样例说明 12的约数包括:1,2,3,4,6,12.共6个 #include <iostream> using namespace std; ...

  6. java小算法—判断一个数是否为质数

    判断一个数是否为质数:只能被1和自身整除的数 1.代码 public class Test {public static void main(String[] args) {boolean b=isP ...

  7. 算法 求一个数的平方根

    python: #coding=utf-8 from decimal import Decimal from decimal import getcontext#设置为显示8位有效数字 getcont ...

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

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

  9. php算法求出一个数可以被分解成多少个_最全的小学干货:34个数学重难点公式(三)...

    1.和差倍问题: 和差问题 和倍问题 差倍问题 已知条件 几个数的和与差 几个数的和与倍数 几个数的差与倍数 公式适用范围 已知两个数的和,差,倍数关系 公式 ①(和-差)÷2=较小数 较小数+差=较 ...

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

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

最新文章

  1. 如何查看一个命令是否被修改过
  2. 转 无损转换Image为Icon
  3. 2021下半年软考分数线会有变动吗?
  4. oracle11g sp 1503,Oracle11g操作ASM权限问题
  5. HDU 1010 Tempter of the Bone DFS(奇偶剪枝优化)
  6. 消控中心人员配置_关于2018年度环创中心楼宇物业综合管理考评情况的通报
  7. 如何查看linux的资源,Linux系统资源查看(示例代码)
  8. Spring AOP代理时 ClassCastException: $Proxy0 cannot be cast to (类型转换错误)
  9. JavaScript文档对象模型DOM节点操作之兄弟节点(4)
  10. 后端自我介绍_新人入职自我介绍
  11. java-Socket文件传输
  12. oracle trap,配置SNMP trap
  13. OpenGL学习笔记一
  14. 在局域网搭建mqtt服务器
  15. 《华为研发》阅读 - 15 (分解“满汉全席”,“先谋而后动”)
  16. python进程池Pool的apply与apply_async到底怎么用?
  17. 私营企业适用于商业贿赂罪吗
  18. (D)TLS1.3大揭秘之TLS1.3总体概览
  19. 借助Microsoft Teams进行在线学习小组的组织与管理
  20. R:数据分析-----汽车数据可视化

热门文章

  1. 一些大任务SQL的优化方案
  2. Merkle tree for non-membership proof
  3. 1.0版走迷宫小游戏(C++)
  4. php 数独计算器,问题描述:数独(Sudoku)是一款大众喜爱的数字逻辑游戏。玩家需要根据9X9盘面上的已知数字_题来了...
  5. 【练习】新浪邮箱注册测试用例
  6. 备案服务器查询网站,网站服务器备案查询
  7. 2021Java春招面试:看完这篇文终于搞明白了
  8. D3.js中文API
  9. Boost:宏BOOST_LOG_TRIVIAL的测试
  10. (三)Web模块:【5】Servlet3.0 与 SpringMVC 整合