因数个数

约数的个数

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

/*
 * 因数个数(使用到质数筛法)
 */
#include <iostream>
#include <cstdio>
#include <vector>
#include <math.h>

using namespace std;

const int MAXN = 4e4;

bool isPrime[MAXN];                 //标记数组
vector<int> prime;                  //保存质数

void initial(){                     //初始化
    fill(isPrime,isPrime+MAXN,true);
    isPrime[0]=false;
    isPrime[1]=false;
    for(int i = 2;i<MAXN;i++){
        if(!isPrime[i]){            //非质数,则跳过该数
            continue;
        }
        prime.push_back(i);
        for(int j = i+i;j<MAXN;j+=i){
            isPrime[j]=false;       //质数的倍数为非质数
        }
    }
    return;
}

int fun(int n){
    vector<int> exponent;
    for(int i = 0;i<prime.size();i++){
        int factor = prime[i];
        if(n<factor){
            break;
        }
        if(n%factor == 0){
            int num = 0;
            while(n%factor == 0){
                n = n/factor;
                num++;
            }
            exponent.push_back(num);
        }
    }
    if(n>1){
        exponent.push_back(1);
    }
    int ans = 1;
    for(int i = 0;i<exponent.size();i++){
        ans*=exponent[i]+1;
    }
    return ans;
}
int main(){
    initial();
    int m;
    while(scanf("%d",&m)!=EOF){
        if(m == 0){
            break;
        }
        for(int i = 0;i<m;i++){
            int n;
            scanf("%d",&n);
            printf("%d\n",fun(n));
        }
    }
    return 0;
}
全部评论
if(n>1){ exponent.push_back(1); } //有什么含义????? 不明白这句话的逻辑,能帮忙解答一下吗?感谢
点赞 回复 分享
发布于 2022-02-07 18:39
n>1说明n还存在一个大于MAXN的因子,且其幂指数必然为1,所以放入1
点赞 回复 分享
发布于 2023-02-21 15:25 湖南

相关推荐

03-28 14:34
中南大学 Java
网易互娱明天的笔试是在一天之内任意选时间作答,那不就等于说可以抄答案?那为什么要发笔试?美团也说不拿笔试卡人,那为什么要发笔试?觉得学生们很有时间是吗?&nbsp;还有那些笔试全A了没有进面的,笔试的意义到底在哪里?
no_work_no_life:网易互娱的笔试本来就很简单 美团的确实不按笔试刷人,但是笔试是捞人的重要依据,尤其对于双非学生……我一面的时候面试官直接说是看我笔试成绩还可以就把我捞起来了……
投递美团等公司6个岗位 >
点赞 评论 收藏
分享
头像
03-30 21:02
已编辑
武汉大学 Java
ALEX_BLX:虽然说聊天记录不可信,不过这个趋势确实如此但我觉得也要想到一点就是卷后端的人里真正有“料”的人又有多少,我说的这个料都不是说一定要到大佬那种级别,而是就一个正常的水平。即使是现在也有很多人是跟风转码的,2-3个月速成后端技术栈的人数不胜数,但今时不同往日没可能靠速成进大厂了。这种情况就跟考研一样,你能上考场就已经打败一半的人了
点赞 评论 收藏
分享
评论
5
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务