这题核心问题在于你求约数个数是从1遍历到n,还是从1遍历到根号n。
//题目:https://www.nowcoder.com/questionTerminal/04c8a5ea209d41798d23b59f053fa4d6
#include <cstdio>
int main(){
int amount;
while(scanf("%d",&amount) != EOF){//读入数组个数N
int i,j,temp;
int num[amount];
for(i = 0; i < amount; i++){//读入要求约数的数
scanf("%d",&num[i]);
temp = 0;//temp用来记录num[i]的约数个数,初始为0
for(j = 1;j*j <= num[i]; j++){//从1循环到num[i]^(1/2)
if(j*j < num[i] && num[i]%j == 0) temp++;
else if(j*j == num[i]){
temp = temp * 2 + 1;
}
}
if(j > 1 && (j-1)*(j-1) != num[i]) temp = temp*2;//不可开方即为偶数个约数
printf("%d\n",temp);//逐行输出
}
}
return 0;
} 
京公网安备 11010502036488号