BZOJ-4459: [Jsoi2013]丢番图

[文章目录]

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;
}

发表评论

邮箱地址不会被公开。 必填项已用*标注