您的位置:首页 > 其它

题目1207:质因数的个数

2014-03-04 21:18 204 查看
题目描述:
求正整数N(N>1)的质因数的个数。
相同的质因数需要重复计算。如120=2*2*2*3*5,共有5个质因数。
输入:

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

对于每组数据,输出N的质因数的个数。
样例输入:
120

样例输出:
5

提示:

注意:1不是N的质因数;若N为质数,N是N的质因数。
import java.io.IOException;
import java.io.FileReader;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Scanner;
import java.util.ArrayList;

class Main
{
public static final boolean DEBUG = false;
public static ArrayList<Integer> prime = new ArrayList<Integer>();

public static void sieve()
{
boolean[] vis = new boolean[1000000];

vis[0] = vis[1] = true;

for (int i = 2; i < 1000; i++) {
if (!vis[i]) {
for (int j = i * i; j < 1000000; j += i) {
vis[j] = true;
}
}
}

for (int i = 2; i < 1000000; i++) {
if (!vis[i]) {
prime.add(i);
}
}
}

public static void solve(int n)
{
int cnt = 0;

for (int i = 0; i < prime.size(); i++) {
int v = prime.get(i);
if (n < v) break;

if (n % v == 0) {
while (n % v == 0) {
cnt++;
n /= v;
}
}
}

if (n != 1) cnt++;

System.out.println(cnt);
}

public static void main(String[] args) throws IOException
{
Scanner cin;
int n;

if (DEBUG) {
cin = new Scanner(new FileReader("d:\\OJ\\uva_in.txt"));
} else {
cin = new Scanner(new InputStreamReader(System.in));
}

sieve();

while (cin.hasNext()) {
n = cin.nextInt();
solve(n);
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: