UVA - 10699 - Count the factors(分解素因数)

墨蓝 2022-06-07 00:23 256阅读 0赞

给出一个很大的数,然后判断素因数的个数,我们先打一个素数数组,里面全存的是素数;
然后注意判断是否可以被整除,如果可以就一口气除到不能除尽为止,然后换下一个素数,继续上述操作;

  1. #include<iostream>
  2. #include<cstring>
  3. #include<cmath>
  4. #define MAXN 1000005
  5. #define ll long long
  6. using namespace std;
  7. bool isprime[MAXN];
  8. int prime[MAXN];
  9. int num = 1;
  10. int getprime(int n) {
  11. //存入isprime数组中
  12. memset(isprime, true, sizeof(isprime));
  13. prime[num++] = 2;
  14. isprime[0] = isprime[1] = false;
  15. for(int i = 3; i <= n; i+=2) {
  16. if(isprime[i]) {
  17. prime[num++] = i;
  18. for(int j=i+i; j <= n; j+=i) {
  19. isprime[j] = false;
  20. }
  21. }
  22. }
  23. }
  24. int main() {
  25. ll n;
  26. getprime(MAXN);
  27. while(cin >> n && n) {
  28. int x = n;
  29. int i = 1, ans = 0, flag;
  30. for(;;) {
  31. flag = 0;
  32. while(x % prime[i] == 0) {
  33. //除尽为止
  34. x /= prime[i];
  35. flag = 1;//标记曾经除过,
  36. }
  37. if(flag) ans++;
  38. i++;//除完需要换下一个素数
  39. if(x == 1 || i >= num) break;//结束的条件就是本身变成了1,或者超过了最大的素数。
  40. }
  41. printf("%d : %d\n", n, ans);
  42. }
  43. return 0;
  44. }

发表评论

表情:
评论列表 (有 0 条评论,256人围观)

还没有评论,来说两句吧...

相关阅读