【题解】UVA13131 题解

UVA13131 题解

思路分析

这题首先我们要知道一个结论:若 ini \mid n,则 nin\dfrac{n}{i} \mid n

简单证明一下,设 ix=nix = nkk 为正整数),则 ni=ixi=x\dfrac{n}{i} = \dfrac{ix}{i} = x。显然 xxnn 的因数,所以得证。

根据这个结论,我们枚举因数枚举到 i×i=ni \times i = n 时就可以了。题目要求不是 kk 的倍数的 nn 的因数之和。这里提供一种反向思路:计算所有 nn 的因数和 kk 的倍数的 nn 的因数并分别求和,然后做差即可求得和。注意要特判平方数,不能计算重复。

关键代码

void solve(int n, int k)
{
	int sum = 0, ks = 0;
	for(int i = 1;i * i <= n;i++) //枚举因数
	{
		if(i * i == n)//n 是完全平方数且平方根为 i
		{
			sum += i;//因数之和
			if(i % k == 0) ks += i;//k 的倍数的因数之和
		}
		else if(n % i == 0)
		{
			sum += i;
			sum += (n / i);//因数之和
			if(i % k == 0) ks += i;
			if((n / i) % k == 0) ks += (n / i);//k 的倍数的因数之和
		}
	}
	cout << sum - ks << endl;
}
posted @ 2022-11-19 09:52  邻补角-SSA  阅读(14)  评论(0)    收藏  举报  来源