这题真的是一个水题,我开始还以为会超时,所以用了打表的方法没有想到,打表竟然超时了。最后还是用水题的代码AC的,不过这里有点坑爹,考了一点基础知识,当初只是觉得数字太大就一心想着怎样快,没有想到他在输入输出上作文章。
这题就是找因子,我们一般都是让因子从2开始变化,最后加上一就行了。只需要用数字N的开方数就可以我想大家知道吧。
坑爹就在cin和cout上,如果用c+写并且是cin和cout就会超时,但是如果你用scanf和printf就不会超时。
中间还有一个平方数的判断就是想4 9 16 之类的可以开方的。
#include<iostream> using namespace std; #include<cmath> int main() { int n,i,T; cin>>T; while(T--) { scanf("%d",&n); int s=0; for(i=2;i<=(int)(sqrt((double)(n)));i++) { if(n%i==0) { s+=i; s+=n/i; } } if((int)(sqrt((double)(n)))*(int)(sqrt((double)(n)))==n) s-=(int)(sqrt((double)(n))); s+=1; if(n==1) printf("0\n"); else if((n==2)||(n==3)) printf("1\n"); else printf("%d\n",s); } return 0; }