题目描述
知识点
质因子分解
结果
实现
码前思考
- 典型的质因子分解模板题;
- 虽然
n
是1e10
,但是我们只需要求到sqrt(n)
的质因子就好,所以我们的内存还是好的。 - 注意质因子分解的三步走战略!
- 这里不需要记录质因子有哪些。
代码实现
#include "bits/stdc++.h"
using namespace std;
const int maxn = 1e5;
int prime[maxn];
int pNum = 0;
bool p[maxn] = {0};
int n;
void Find_Prime(){
for(int i=2;i<maxn;i++){
if(p[i] == false){
prime[pNum++] = i;
for(int j=i+i;j<maxn;j=j+i){
p[j] = true;
}
}
}
}
int main(){
//1.首先进行打表,记录下1~maxn的所有素数
Find_Prime();
while(~(scanf("%d",&n))){
int cnt=0;
int sqr = (int)sqrt(1.0*n)+1;
for(int i=0;prime[i]<=sqr;i++){
if(n % prime[i] == 0){
while(n % prime[i] == 0){
cnt++;
n = n / prime[i];
}
}
}
if(n != 1){ //说明还有
cnt++;
}
printf("%d\n",cnt);
}
return 0;
}