[文章目录]
Description
求的整数解个数。1<=N<=10^14
=>xy=n(x+y);
=>xy-nx-ny=0;
=>(x-n)*(y-n)=n^2
那么就是求n^2的约数个数,质因子分解,指数+1连乘。
O(√n),注意取上整:x=y=2n
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
ll n,ans[1000],z[1000],fna=1,top;
int main()
{
scanf("%lld",&n);
for(ll i=2;i*i<=n;++i)
if(n%i==0) for(top++;n%i==0;ans[top]++,n/=i);
if(n!=1) ans[++top]++;
for(int i=1;i<=top;++i) fna*=(ans[i]*2+1);
fna=(fna&1)?(fna>>1)+1:(fna>>1);
printf("%lld",fna);
return 0;
}