链接:https://www.nowcoder.com/acm/contest/90/F
来源:牛客网
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
空间限制: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; }