天天看點

HDU 2601 An easy problem (數論)

思路:

可以化簡為 N+1 = (i+1)*(j+1);

坑點:

注意i*i爆int了。。。

#include <iostream>
#include <cstdio>
#include <string.h>
#include <queue>
#include <cmath>
#include <algorithm>
#include <map>

typedef long long int lli;
using namespace std;

lli ff(lli n){
    lli res = ;
    int cnt = ;
    for(lli i = ;i * i <= n;i++){
        cnt = ;
        while(n % i == ){
            cnt++;
            n /= i;
        }
        res *= (cnt+);
    }
    if(n != ){
        res *= ;
    }
    return res-;
}

int main(){
    int t;
    cin>>t;
    lli n;
    while(t--){
        scanf("%lld",&n);
        if(n == ){
            printf("0\n");
            continue;
        }
        lli ans = ff(n+);
        ans = (ans + ) / ;
        printf("%lld\n",ans);
    }
}