约数的个数

#include <stdio.h>

int main() {
    int n;
    scanf("%d", &n);
    int num[n];
    for (int i = 0; i < n; i++) {
        scanf("%d", &num[i]);
    } //读取输入的部分

    for(int i=0;i<n;i++){ //计算的部分
        int sub=1,sum=0;
        while(sub*sub<num[i]){ //具体原理我也不清楚,就知道这么算,只要平方小于要求的数就+2,有佬解释解释吗?
            if(num[i]%sub==0) sum+=2;
            sub++;
        }if(sub*sub==num[i]) sum++;
        printf("%d \n", sum);
    }
    return 0;
}