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) ) 就不满足题目所需的条件了*/