【清华机试】质因数的个数

    xiaoxiao2025-03-15  12

    题目描述 求正整数N(N>1)的质因数的个数。 相同的质因数需要重复计算。如120=2*2*2*3*5,共有5个质因数。 输入描述 可能有多组测试数据,每组测试数据的输入是一个正整数N(1~10^9)。 输出描述 对于每组数据,输出N的质因数的个数。 样例输入 120 样例输出 5

    /** #include<iostream> #include<cstdio> #include<cmath> #include<cstring> using namespace std; const int maxn = 10000; const int maxm = 1000000; // 由于输入为 1~10^9,但是这样的话10^6-10^9之间的质数仍未判断,这种方法不适合较大数值的质因数判断 int num[maxn] = {0}; // 存储maxm-1以内的质数 int bite[maxm] = {0}; // 存储maxm-1以内的数字是否为质数的标志变量 int main() { freopen("1.txt", "r", stdin); freopen("2.txt", "w", stdout); // 初始化 memset(bite, -1, sizeof(bite)); bite[0] = 0; bite[1] = 0; for(int i = 2; i <= sqrt(maxm); ++i) { for(int j = 2; j*i <= maxm; ++j) { bite[i*j] = 0; } } int count = 0; // maxm-1以内质数个数 for(int i = 0; i < maxm; ++i) { if(bite[i] == -1) { num[count++] = i; } } // end int n; int result = 0; while(cin >> n) { cout << n << endl; result = 0; for(int site = 0; n != 1; ++site) { while(n != 1 && (n % num[site] == 0)) { n /= num[site]; // 因为是这么计算质因数个数,所以结束条件为 n == 1 cout << n << endl; ++result; } } cout << result << endl; } return 0; } */ #include<iostream> #include<cstdio> using namespace std; int main() { int n; int result; while(cin >> n) { result = 0; // 这种循环也实现了质因数 for(int i = 2; i*i <= n; ++i) { while(n % i == 0) { n /= i; ++result; } } cout << ++result << endl; // 最后一个 n > i 的退出的情况 } return 0; }
    转载请注明原文地址: https://ju.6miu.com/read-1297053.html
    最新回复(0)