题目链接:分数拆分 - 题目 - Daimayuan Online Judge
题目描述:
输入正整数 k,找到所有的正整数 y≤x, 使得 1/k=1/x+1/y。
输入格式
输入一个正整数 k(1≤k≤10^7)。
输出格式
输出一个数,表示满足条件的x,y的个数。
样例输入
12
样例输出
8
因为k的范围很大对应x,y可能取值也会很大,如果暴力枚举无疑会超时,那么我们考虑缩小下枚举的范围。
给出了k,x,y之间的关系,k已知,对x,y我们已知一项便可以通过等式推到另一项。再根据y<=x,可以得到y<=2k,并且y>k。由等式可以得到x=(ky)/(y-k)。
代码:
#include <bits/stdc++.h>
using namespace std;
#define ll long long
ll cnt, k, ans;
int main()
{
cin >> k;
for (ll y = k + 1; y <= k + k; y++)
{
if ((k * y) % (y - k) == 0)
ans++;
}
cout << ans;
}