分解质因数 P96 约束的个数

//分解质因数 P96
//https://www.nowcoder.com/practice/20426b85f7fc4ba8b0844cc04807fbd9?tpId=60&tqId=29479&tPage=1&ru=/kaoyan/retest/1001&qru=/ta/tsing-kaoyan/question-ranking
#include <iostream>
#include <cstdio>
#include <vector>
#include <cmath>
using namespace std;
//const int MAXN = sqrt(1e9)+1; //error: variable length array declaration not allowed at file scope
//低版本不支持
const int MAXN = 4e4;

vector<int> prime;
bool isPrime[MAXN];

void Initial(){
    for(int i=0;i<MAXN;++i)  isPrime[i] = 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 NumberOfPrimeFactor(int number){
    int answer = 0;
    for(int i=0;i<prime.size() && prime[i]<number;++i){
        int factor = prime[i];
        while(number % factor == 0){
            number /= factor;
            answer++;
        }
    }
    if(number > 1)  answer++;
    return answer;
}

int main(){
    Initial();
    int k;
    while(scanf("%d",&k) != EOF){
        printf("%d\n",NumberOfPrimeFactor(k));
    }
    return 0;
}

//习题6.7  约数的个数
//分解质因数习题 约束的个数 自己尝试改写  success
//或者用视频方法  先用向量保存起来  在累积  vector<int> exponent;  exponent.push_back(current);
//https://www.nowcoder.com/practice/04c8a5ea209d41798d23b59f053fa4d6?tpId=60&tqId=29475&tPage=1&ru=/kaoyan/retest/1001&qru=/ta/tsing-kaoyan/question-ranking
#include <iostream>
#include <cstdio>
#include <vector>
#include <cmath>
using namespace std;
const int MAXN = 4e4;

vector<int> prime;
bool isPrime[MAXN];

void Initial(){
    for(int i=0;i<MAXN;++i)  isPrime[i] = 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 NumberOfYueshu(int number){
    int answer = 1;
    int current;
    for(int i=0;i<prime.size() && prime[i]<number;++i){
        int factor = prime[i];
        current = 0;
        while(number % factor == 0){
            number /= factor;
            current++;
        }
        answer *=  (current +1);
    }
    if(number > 1)  answer *= 2;
    return answer;
}

int main(){
    Initial();
    int n,m;
    scanf("%d",&n);//或者用视频中的方式也行
    while(n--){
        scanf("%d",&m);
        printf("%d\n",NumberOfYueshu(m));
    }
    return 0;
}



全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务