水题, 不要想复杂了 , 只需要 从2 循环到 sqrt(n), 判断是否能整除就可以了.........
#include<stdio.h>
#include<iostream>
#include <math.h>
using namespace std;
int is_yinzi(int x)
{
int i,m;
int sum = 1;
if(x==1) return 0;
m = floor(sqrt(x)+0.5);
for(i = 2;i <= m;i++){
if(x%i==0)
{
sum += i;
int t = x / i;
if(t!= i)//............?
sum += t;
}
}
return sum;
}
int main()
{
int T,N;
scanf("%d",&T);
while(T--){
scanf("%d",&N);
int sum = is_yinzi(N);
printf("%d\n",sum);
}
return 0;
}