【小算法】求约数个数
约数个数及证明
从小学数学开始?
什么是约数:如果一个整数能被两个整数整除,那么这两个数是这个数的约数。
一个数的约数的个数=这个数的所有质因子的次数+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;
}
【小算法】求约数个数相关推荐
- c语言算法求约数个数,【代码】求一个数的因数和、求优化、顺便也供新人参考算法...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include main() { int n,q,p,m,k=1,sum=0,s[99999]={2},t[99999];//n是输入 ...
- 算法——求某个数的质因数
求某个数的质因数,打印的格式为90=2*3*3*5. 思路为:既然我们求质因数,我们可以利用遍历的方法,用这个数从2开始除直到该数本身寻找他的因数 1.第一个问题:因为数的因数可能重复比如9=3*3. ...
- 埃拉托色尼筛选法c语言求最大公约数,用埃拉托色尼筛算法求两个数最大公约数C++的实现...
#include "stdafx.h" #include "iostream" #include #include //使用埃氏筛选法求最大公约数 void s ...
- 【c语言】蓝桥杯算法提高 约数个数
问题描述 输入一个正整数N (1 样例输入 12 样例输出 6 样例说明 12的约数包括:1,2,3,4,6,12.共6个 #include<stdio.h> #include<ma ...
- 蓝桥杯 ADV-98 算法提高 约数个数
输入一个正整数N 样例输入 12 样例输出 6 样例说明 12的约数包括:1,2,3,4,6,12.共6个 #include <iostream> using namespace std; ...
- java小算法—判断一个数是否为质数
判断一个数是否为质数:只能被1和自身整除的数 1.代码 public class Test {public static void main(String[] args) {boolean b=isP ...
- 算法 求一个数的平方根
python: #coding=utf-8 from decimal import Decimal from decimal import getcontext#设置为显示8位有效数字 getcont ...
- php算法求出一个数可以被分解成多少个_小学奥数必须掌握的30个知识模块汇总...
关注成长教育 解决学习困惑 点击蓝字关注,与全国家长比肩同行 1.和差倍问题和差问题 和倍问题 差倍问题已知条件 几个数的和与差 几个数的和与倍数 几个数的差与倍数公式适用范围 已知两个数的和,差, ...
- php算法求出一个数可以被分解成多少个_最全的小学干货:34个数学重难点公式(三)...
1.和差倍问题: 和差问题 和倍问题 差倍问题 已知条件 几个数的和与差 几个数的和与倍数 几个数的差与倍数 公式适用范围 已知两个数的和,差,倍数关系 公式 ①(和-差)÷2=较小数 较小数+差=较 ...
- php算法求出一个数可以被分解成多少个_小学数学必考的34个数学重难点公式,赶紧给孩子收藏!...
34个小学数学重难点公式 1.和差倍问题 2.年龄问题的三个基本特征 ①两个人的年龄差是不变的: ②两个人的年龄是同时增加或者同时减少的: ③两个人的年龄的倍数是发生变化的: 3.归一问题的基本特点 ...
最新文章
- 如何查看一个命令是否被修改过
- 转 无损转换Image为Icon
- 2021下半年软考分数线会有变动吗?
- oracle11g sp 1503,Oracle11g操作ASM权限问题
- HDU 1010 Tempter of the Bone DFS(奇偶剪枝优化)
- 消控中心人员配置_关于2018年度环创中心楼宇物业综合管理考评情况的通报
- 如何查看linux的资源,Linux系统资源查看(示例代码)
- Spring AOP代理时 ClassCastException: $Proxy0 cannot be cast to (类型转换错误)
- JavaScript文档对象模型DOM节点操作之兄弟节点(4)
- 后端自我介绍_新人入职自我介绍
- java-Socket文件传输
- oracle trap,配置SNMP trap
- OpenGL学习笔记一
- 在局域网搭建mqtt服务器
- 《华为研发》阅读 - 15 (分解“满汉全席”,“先谋而后动”)
- python进程池Pool的apply与apply_async到底怎么用?
- 私营企业适用于商业贿赂罪吗
- (D)TLS1.3大揭秘之TLS1.3总体概览
- 借助Microsoft Teams进行在线学习小组的组织与管理
- R:数据分析-----汽车数据可视化
热门文章
- 一些大任务SQL的优化方案
- Merkle tree for non-membership proof
- 1.0版走迷宫小游戏(C++)
- php 数独计算器,问题描述:数独(Sudoku)是一款大众喜爱的数字逻辑游戏。玩家需要根据9X9盘面上的已知数字_题来了...
- 【练习】新浪邮箱注册测试用例
- 备案服务器查询网站,网站服务器备案查询
- 2021Java春招面试:看完这篇文终于搞明白了
- D3.js中文API
- Boost:宏BOOST_LOG_TRIVIAL的测试
- (三)Web模块:【5】Servlet3.0 与 SpringMVC 整合