题目描述
知识点
质因子分解
我的实现
码前思考
这里需要用到《算法笔记》上一个比较偏的知识点:
代码实现
//仍然是打印素数表的方法
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = (int) sqrt(1e9+10);
int n;
int input[1010];
int num=0;
int prime[maxn];
bool p[maxn]={false};
void findPrime(){
for(int i=2;i<maxn;i++){
if(p[i]==false){
prime[num++]=i;
for(int j=i+i;j<maxn;j+=i){
p[j]=true;
}
}
}
}
int main(){
findPrime();
while(scanf("%d",&n)!=EOF){
for(int i=0;i<n;i++){
scanf("%d",&input[i]);
}
//接下来是求解质因子时间
for(int i=0;i<n;i++){
int cur = input[i];
int cnt = 1;
int sqr = (int)sqrt(1.0*cur);
for(int i=0;i<num&&prime[i]<=sqr;i++){
int factorCnt=0;
if(cur%prime[i]==0){
while(cur%prime[i] == 0){
factorCnt++;
cur=cur/prime[i];
}
}
cnt = cnt*(factorCnt+1);
}
if(cur!=1){
cnt = cnt*2;
}
printf("%d\n",cnt);
}
}
return 0;
}
码后反思
加油!