分解素因数 1

/*
分解素因数
题目1207:质因数的个数
题目描述:
求正整数N(N>1)的质因数的个数。
相同的质因数需要重复计算。如120=2*2*2*3*5,共有5个质因数。
输入:
可能有多组测试数据,每组测试数据的输入是一个正整数N,(1<N<10^9)。
输出:
对于每组数据,输出N的质因数的个数。
样例输入:
120
样例输出:
5
提示:
注意:1不是N的质因数;若N为质数,N是N的质因数。
*/
#include <stdio.h>
#define max 100000
int prime[max+1];
bool mark[max+1];
int primesize;
void init(){
int i,j;
primesize=0;
for(i=1;i<max;i++)
mark[i]=false;
for(i=2;i<=max;i++){
if(mark[i]==true) continue;
prime[primesize++]=i;
if(i>=1000)continue;
for(j=2*i;j<=max;j +=i){
mark[j]=true;
}
}
}
int main(){
init();
int n,i;
while(scanf("%d",&n) != EOF){
int ansprime[30];//分解的素因数
int anssize=0;//分解的素因数个数
int ansnum[30];//分解的素因数的幂指数
for(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){//如果测试完2到max的所有素因数,n!=1,则剩余一个大于max的素因数
ansprime[anssize]=n;
ansnum[anssize++]=1;
}
int ans = 0;
for(i=0;i<anssize;i++){
ans += ansnum[i];//统计各个素因数的幂指数
}
printf("%d\n",ans);
}
return 0;

}

//在本题中素数只需筛选到100000,不用到10^9,这是因为
//n至多只存在一个大于sqrt(n)的素因数,否则两个大于
//sqrt(n)的数相乘大于n
//如果要确定被分解整数因数的个数,只需求出所有指数的
//不同组合,(e1+1)*(e2+1)*...*(en+1)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值