计算机机试题: 分解素因数

题目描述:

求正整数N(N>1)的质因数的个数。 
相同的质因数需要重复计算。如120=2*2*2*3*5,共有5个质因数。

输入:

可能有多组测试数据,每组测试数据的输入是一个正整数N,(1< N< 10^9)。

输出:

对于每组数据,输出N的质因数的个数。

样例输入:

120
  • 1
  • 2

样例输出:

5
  • 1
  • 2

提示:

注意:1不是N的质因数;若N为质数,N是N的质因数。

代码如下:

#include<stdio.h>
#include<math.h>
int prime[100001];
bool mark[100001];
int primeSize;
void init()
{
	primeSize = 0;
	for(int i=2; i<100001; i++)
	{
		if(mark[i]==true) continue;
		prime[primeSize ++] = i;
		for(int j = i*i; j<=100000; j+=i)
		{
			mark[i] = true;
		}
	}
}
int main()
{
	init();
	int n;
	while(scanf_s("%d", &n)!=EOF)
	{
		int ansPrime[30];   //按顺序保存分解出的素因数
		int ansSize = 0;    // 分解出素因数的个数
		int ansNum[30];    //  保存素因数对应出的幂指数
		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++)
		{
			ans+= ansNum[i];
		}
		printf("%d\n",ans);
	}
	return 0;
}


思路如下:求一个数的质因数,质因数一定是素数,所以我们先求出所有的素数,循环去除,有的可能需要除几次,需要进行记录。

猜你喜欢

转载自blog.csdn.net/xckkcxxck/article/details/80999313