每个数只需要遍历到根号n就可以

约数的个数

http://www.nowcoder.com/questionTerminal/04c8a5ea209d41798d23b59f053fa4d6

这题核心问题在于你求约数个数是从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;
}


全部评论

相关推荐

不愿透露姓名的神秘牛友
03-18 14:29
牛客604067584号:感觉算法卷的人少很多,毕竟只有一部分bg还不错的硕士才会考虑算法,虽然hc不如后端,但是竞争真的少很多。
点赞 评论 收藏
分享
迷茫的大四🐶:自信一点,我认为你可以拿到50k,低于50k完全配不上你的能力,兄弟,不要被他们骗了,你可以的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务