[瞎搞]JZOJ 3096 Hash函数

Description

    明明觉得hash是个好算法,代码短、效率高。某天,他碰到了一个求正方形个数的问题,于是很淡定地枚举对角线然后用hash判存在,妥妥的搞定,但是提交后却wa了几个点。仔细观察其hash函数为:h=x*y+x+y 。为了让明明知道这个函数存在什么问题,对于给出一个h值,请你来告诉他有多少对(x,y)满足上述式子(max(x,y)<=h;h,x,y都为非负整数)。


 

 

Input

多组测试数据,第一行为测试点的个数T,接下来每一行一个整数h,意义如上。


 

Output

    一共T行,每行一个整数,分别表示有多少组(x,y)满足要其对应的h值。


 

 

Sample Input

3
1
3
4

Sample Output

2
3
2
 

Data Constraint

 
 

Hint

【样例解释】


(1,0),(0,1)


(0,3),(1,1),(3,0)


(4,0),(0,4)


 


【数据范围】


对于30%数据 h<=20,000 , T<=1000


对于100%数据 h<=100,000,000 , T<=10000;

 

分析

式子随便搞一下就会发现是h+1=(x+1)(y+1)

那就求h+1的因子个数即可

 

#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int h,t;

int main() {
    scanf("%d",&t);
    while (t--) {
        scanf("%d",&h);
        h++;
        int ans=0,st=sqrt(h);
        for (int i=1;i<=st;i++)
            ans+=h%i==0?(i*i==h?1:2):0;
        printf("%d\n",ans);
    }
}
View Code

 

posted @ 2018-10-28 21:30  Vagari  阅读(216)  评论(0编辑  收藏  举报