// http://acm.hdu.edu.cn/showproblem.php?pid=2601
#include<stdio.h>
#include<math.h>
int main()
{
int n,pos,i,q;
__int64 p;
while(scanf("%d",&n)!=EOF)
{
while(n--)
{
pos=0;
scanf("%I64d",&p);
p++;
q=(int)(sqrt(p*1.0));
for(i=2;i<=q;i++)
if(p%i==0)
pos++;
printf("%d\n",pos);
}
}
return 0;
}
/*
虽然这个题目的名字叫An easy problem ,但是做起来,这还真有点困难
开始就用暴力破解的方法去做,很明显的,会超时,当时算到1w就很久,具体时间没看,因该有几十秒的
没办法,就求助百度了,我靠,原来 i*j+i+j 是可以变形的(i+1)*(j+1)=n+1
换句话说,就是找(n+1)的因子个数
这里要注意
为什么
///
q=(int)(sqrt(p*1.0));
for(i=2;i<=q;i++)
//
因为i>0 那么i>1 所以就是从2开始 中间就相当于i*j=p 一样,所以这里
的for语句就是根据j来判断的(j>i 如果是按照i的话,因为i<=j 所以j>sqrt(p) )
就不满足题目所需的条件了
*/
hdu 2601
最新推荐文章于 2019-03-15 16:57:00 发布