题解 | 质因数的个数
质因数的个数
https://www.nowcoder.com/practice/20426b85f7fc4ba8b0844cc04807fbd9
#define _CRT_SECURE_NO_WARNINGS #include <cstdio> #include <iostream> #include <vector> using namespace std; const int maxn = 4e4; bool isprime[maxn]; vector<int>prime; void initial() { for (int i = 0; i < maxn; i++) { isprime[i] = true; } isprime[0] = false; isprime[1] = false; for (int i = 2; i < maxn; i++) { if (!isprime[i]) { continue; } prime.push_back(i); for (int j = i * i; j < maxn; j += i) { isprime[j] = false; } } } int numberofprimefactor(int number) { int answer = 0; for (int i = 0; i < prime.size(); i++) { int factor = prime[i]; if (number < factor) { break; } int exponent = 0; while (number % factor == 0) { exponent++; number /= factor; // printf("num:%d\n", number); // printf("yingzi:%d\n", factor); } answer += exponent; } if (number > 1) { //如果 number 大于 1,说明 number 本身是一个(大于4e4的)质数,将 answer 加 1 answer += 1; } return answer; } int main() { initial();//shai fa /*int k; while (scanf("%d", &k)!=EOF) { printf("%d\n", prime[k - 1]); }*/ int number; while (scanf("%d", &number) != EOF) { printf("%d\n", numberofprimefactor(number)); } return 0; }
质数(素数)相关问题 文章被收录于专栏
1.质数判断 2.输出一定范围内质数(筛法) 机试技巧:用打表法降低时间复杂度