题目描述
给定\(n(2≤n≤10^9)\)值,要求\(x\)、\(y\)均为正整数,且\(x<y\),并且满足\(\frac{1}{x}+\frac{1}{y}=\frac{1}{n}\).编程统计有多少对这样的\(x\)和\(y\)。
输入格式
一个整数n
输出格式
一个整数,表示相应的方法数是多少。
样例输入
6
样例输出
4
思路
先把原方程化简
\(\frac{1}{x}+\frac{1}{y}=\frac{1}{n} \Rightarrow \frac{xy}{x+y} = \frac{1}{n} \Rightarrow xy = nx + ny \Rightarrow xy-nx-ny = 0 \Rightarrow xy - nx -ny + n^2 = n^2 \Rightarrow n^2 = (n-x)(n-y)\)
所以原方程等价于\(n^2 = (n-x)(n-y)\)
令\(a = n-x , b = n-y\)且\(a < b\)
则\(n^2=ab\)
不难发现\(a\)和\(b\)是\(n^2\)的一组因子
如果\(n^2\)有\(k\)个因子,就有\(\frac{k}{2}\)组解,对应了\(\frac{k}{2}\)组\(x\)和\(y\)
我们把\(n\)进行质因数分解得$n=a_{1}^{p_{1}}\times a_{2}^{p_{2}}\times a_{3}^{p_{3}}\times \dots a_{m}^{p_{m}} $
则\(n\)有\(\Pi_{i=1}^{m}(p_{i}+1)\)个因子
同样把\(n^2\)进行质因数分解得$n^{2}=a_{1}^{2p_{1}}\times a_{2}^{2p_{2}}\times a_{3}^{2p_{3}}\times \dots a_{m}^{2p_{m}} $
则\(n^2\)有\(\Pi_{i=1}^{m}(2p_{i}+1)\)个因子
所以\(result =\frac{k}{2}=\frac{1}{2}\Pi_{i=1}^{m}(2p_{i}+1)\)
coding
#include <bits/stdc++.h>
using namespace std;
int n,result = 1;
int main()
{
cin >> n;
for(register int i = 2;i * i <= n;i ++)
{
if(n % i) continue;
register int cnt = 0;
while(n % i == 0) cnt ++, n /= i;
result *= cnt * 2 + 1;
}
if(n > 1) result *= 3;
result >>= 1;
cout << result << endl;
return 0;
}
原文地址:https://www.cnblogs.com/Mark-X/p/11699437.html