Description
定义将一个正整数n分解质因数中素数的个数为f(n)。如18=2*3*3。其中有两个3,一个2。所以f(18)=3。
Input
第一行是一个正整数t,表示有t组数据。接下来有t行。
每行有一个正整数n(1<=n<=10000000)。
Output
对于每个n,输出f(n)。
Sample Input
2
3
18
SampleOutput
1
3
代码如下
#include <stdio.h>
#include<math.h>
#define N 10000000
int prime[N + 1] = { 0 };
int main()
{
prime[2] = 1;
for (int i = 3; i <= N; i += 2) //素数打表
{
prime[i] = 1;
}
for (int i = 3; i*i <N; i += 2)
{
if (prime[i])
{
for (int j = i*i; j <= N; j += 2 * i)
{
prime[j] = 0;
}
}
}
int t, x, k, cnt;
scanf("%d", &t);
while (t--)
{
cnt = 0;
scanf("%d", &x);
for (int j = 2; j <= x; j++)
{
if (prime[j])
{
while ( x%j == 0)
{
cnt++;
x = x / j;
}
}
}
printf("%d\n", cnt);
}
return 0;
}