约数

设a,b,c为三个整数,b!=0,a=bc,则称啊被b整除,或b整除a,记作b|a
试除法
求n的正约数集合
这个感觉用的挺多的,在我印象里好像出现过好几次这种类型的题
这个方法主要原理为:约数是成对存在的(d(d>=根号下n)是n的约数,则n/d也是n的约数。因此,只扫描d=1~根号下n即可。时间复杂度O(根下n)

int factor[1600],m=0;
for(int i=1;i*i<=n;i++)
{
	if(n%i==0)
	{
		factor[++m]=i;
		if(i!=n/i)
		factor[++m]=n/i;
	}
}
for(int i=1;i<=m;i++)
{
	cout<<factor[i]<<endl;
}

倍数法
求1~n每个数的正约数集合
这个时候用上面的方法就太费时间了,可以采取以下思路:
对于每个数d,1~n中以d为约数的数就是d,2d,3d…floor(n/d)*d
代码实现

vector<int> factor[500010];
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++)
{
	for(int j=0;j<factor[i].size();j++)
		printf("%d",factor[i][j]);
	puts("");
}

关于约数的一些没啥用的性质
能被 2 整除的数:整数的个位能被 2 整除

能被 4 整除的数:整数末尾的两位数能被 4 整除

能被 8 整除的数:整数末尾的三位数能被 8 整除

能被 3 整除的数:整数各位数字之和能被 3 整除

能被 6 整除的数:整数能被 2、3 同时整除

能被 9 整除的数:整数各位数字之和能被 9 整除

能被 5 整除的数:整数的末位是 0 或 5

能被 7 整除的数:截去整数的个位,再减去个位数的 2 倍,若差是 7 的倍数,则原数能被7整除。(迷惑)
约数个数定理:
n可以分解质因数:n=p1^a1 p2a2*p3a3…pk^ak,
由约数定义可知p1^a1 的约数有:p1^0, p1^1, p12…p1a1 ,共(a1+1)个;同理p2a2的约数有(a2+1)个…pkak的约数有(ak+1)个。
故根据乘法原理:n的约数的个数就是(a1+1)(a2+1)(a3+1)…(ak+1)。
例:将378000 分解质因数378000=2^ 4×3^ 3×5^ 3×7^1
由约数个数定理可知378000共有正约数(4+1)×(3+1)×(3+1)×(1+1)=160个。
约数和定理:
若n可以 分解质因数:n=p1^ a1
p2^ a2p3^ a3…*pk^ak,
可知p1^ a1的约数有:p1 ^ 0, p1^ 1, p1^ 2…p1^a1

同理可知,pk^ ak的约数有:pk^ 0, pk^ 1, pk^ 2…pk^ak ;
实际上n的约数是在p1^ a1、p2^ a2、…、pk^ak每一个的约数中分别挑一个相乘得来,
可知共有(a₁+1)(a₂+1)(a₃+1)…(ak+1)种挑法,即约数的个数。
由 乘法原理可知它们的和为
f(n)=(p1^ 0+p1^ 1+p1^ 2+…p1^ a1)(p2^ 0+p2^ 1+p2^ 2+…p2^ a2)…(pk^ 0+pk^ 1+pk^ 2+…pk^ak)
这周主要复习了质数的相关问题,然后学了学约数,在洛谷上没找到约数的系统分类,所以题目方面就做的质数素数这方面的和数论分类里边的题,做的比较费劲,水平还是有待提高TAT
感觉约数这方面用的不如素数多,数学板块也是模板需要的比较多,感觉很多题就是熟练模板之后就做的容易多了。继续加油加油啦~
附上截图
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值