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

链接:https://www.nowcoder.com/acm/contest/90/F
来源:牛客网

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

给定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可以化成(x-n)*(y-n)=n^2,(x-n)和(y-n)是n^2的因子,
只要求出n^2所有因子个数即可。

#include<cstdio>
using namespace std;
int main()
{
    int T,N;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d",&N);
        //求N*N的因数 
        int ans=1;
        for(int i=2;i*i<N;i++)
        {
            int temp=0;
            while(N%i==0)
            {
                temp++;
                N/=i;
            }
            ans*=(temp*2+1);
        }
        if(N>1) ans*=3;//剩下一个大素数,则N^2有两个大素数,所以ans*(2+1) 
        printf("%d
",(ans-1)/2+1);
    }
    return 0;
}
View Code


原文地址:https://www.cnblogs.com/ACRykl/p/8641782.html