题解 | #质因数的个数#
质因数的个数
https://www.nowcoder.com/practice/20426b85f7fc4ba8b0844cc04807fbd9
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
// 短除法 用于将数质数分解
// 质数筛法。
// int t = sqrt(1e9) +1 ;
const int N = 1e4 ;
int isPrimer[N] ;
vector<int> primer ;
void init()
{
fill(isPrimer, isPrimer +N , true); // 都设置为true 。
// 筛质数 , 质数的倍数都不是质数。
isPrimer[0] = false ;
isPrimer[1] = false ;
for(int i = 2; i <= N ; ++ i)
{
if(isPrimer[i] == false)
{
continue ;
}
primer.push_back( i) ;
for(int j = i *2 ; j <= N ; j += i )
{
isPrimer[i] = true ;
}
}
}
int main() {
int n ;
init();
while(cin>>n)
{
int res =0 ;
for(int i = 0 ; i < primer.size() && primer[i] < n ; ++ i)
{
// cout<<"primer " <<primer[i] <<endl ;
while(n % primer[i]== 0 )
{
n = n/ primer[i] ;
res++ ;
}
}
if(n >1)
{
res++ ;
}
cout<<res<<endl ;
}
}
// 64 位输出请用 printf("%lld")
查看12道真题和解析