hdu 2601

来源:互联网 发布:美食做法软件 编辑:程序博客网 时间:2024/05/29 16:20
// 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) )     就不满足题目所需的条件了*/