第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛 F等式

链接:https://www.nowcoder.com/acm/contest/90/F

题目描述 

给定n,求1/x + 1/y = 1/n (x<=y)的解数。(x、y、n均为正整数)


输入描述:

在第一行输入一个正整数T。
接下来有T行,每行输入一个正整数n,请求出符合该方程要求的解数。
(1<=n<=1e9)

输出描述:

输出符合该方程要求的解数。
示例1

输入

3
1
20180101
1000000000

输出

1
5
181


1/x + 1/y = 1/n  ==> xy = xn+yn ==> 

xy-xn-yn+n*n=n*n ==>(x-n)(y-n) = n*n


所以题目就是求 n * n  的因子数

不能直接求 数据太大

所以分解质因子

#include<bits/stdc++.h>

using namespace std;

typedef long long ll;

int main()
{
    int t;
    ll n;
    ll ans ;
    cin >> t;

    while(t --)
    {
        cin >> n;

        ll temp = n * n;
        ans = 1;
        for(int i = 2;i * i <= temp;i ++)
        {
            int  cnt = 1;
            while(temp % i == 0)
            {
                temp /= i;
                cnt ++;
            }
            ans *= cnt;
        }
        cout<<ans/2 + 1<<endl;
    }

    return 0;
}


猜你喜欢

转载自blog.csdn.net/ii0789789789/article/details/79687997