牛客网考研机试题集合:质因数的个数

1.素数筛法选出所有的素数(防止超时)【理论上也可以从2一直遍历到sqrt(n),判断整除的同时判断是否为素数,在判断指数】

2.统计素因数的个数以及指数

3.整数n最多存在1个质因数大于sqrt(n);

#include<bits/stdc++.h>
using namespace std;
int primeSize;
int mark[100001];
int prime[100001];
void init(){
    memset(mark,0,sizeof(mark));
    primeSize=0;
    for(int i=2;i<=100000;i++){
        if(mark[i]==1){
            continue;
        }
        prime[primeSize++]=i;
        if(i>=10000){
            continue;
        }
        for(int j=i*i;j<100001;j+=i){
            mark[j]=1;
        }
    }
}
int main(){
    int n;
    init();
    while(scanf("%d",&n)!=EOF){
    	if(n==1){
			printf("1\n");
			continue;
		}
         int ansSize=0;
        int ansNum[50];
        int ansPrime[50];
        for(int i=0;i<primeSize;i++){
            if(n%prime[i]==0){
                ansPrime[ansSize]=prime[i];
                ansNum[ansSize]=0;
                while(n%prime[i]==0){
                    ansNum[ansSize]++;
                    n/=prime[i];
                }
				 ansSize++;
                if(n==1){
                    break;
                }
            }
           
        }
        if(n!=1){
            ansPrime[ansSize]=n;
            ansNum[ansSize++]=1;
        }
        int ans=0;
        for(int i=0;i<ansSize;i++){
        	//cout<<ansPrime[i]<<" "<<ansNum[i]<<endl;
            ans+=ansNum[i];
        }
        printf("%d\n",ans);

    }
    return 0;
}
发布了53 篇原创文章 · 获赞 3 · 访问量 3487

猜你喜欢

转载自blog.csdn.net/sinat_38292108/article/details/104712861
今日推荐