fork download
  1. // **************************************************************************************************
  2. // ************************************* Method - 1 *************************************************
  3.  
  4. // Always works
  5.  
  6. vector<bool> sieve(1e7 + 1, 1); // assign it as global variable
  7. vi prime;
  8. void create_Sieve()
  9. {
  10. sieve[0] = false, sieve[1] = false;
  11. for (int i = 2; i * i <= 1e7; i++)
  12. {
  13. if (sieve[i] == true)
  14. for (int j = i * i; j <= 1e7; j += i)
  15. {
  16. sieve[j] = false;
  17. }
  18. }
  19.  
  20. for (int i = 2; i <= 1e7; i++)
  21. {
  22. if (sieve[i])
  23. prime.push_back(i);
  24. }
  25. }
  26.  
  27. map<int, int> prime_fact(int n)
  28. {
  29. map<int, int> mp;
  30. for (auto &i : prime)
  31. {
  32. if (i * i > n)
  33. break;
  34.  
  35. while ((n % i) == 0)
  36. {
  37. mp[i]++;
  38. n /= i;
  39. }
  40. }
  41.  
  42. if (n != 1) // --> bcz n can have at most 1 factor more than sqrt(n)
  43. mp[n]++;
  44.  
  45. return mp;
  46. }
  47.  
  48.  
  49.  
  50. // **************************************************************************************************
  51. // ******************************* Method - 2 --> DO NOT USE ****************************************
  52.  
  53. // Only valid for prime factorisation of values ≤ 1e7
  54.  
  55. vector<int> sieve(1e7 + 1); // stores smallest prime factor
  56. void create_Sieve()
  57. {
  58. // Assuming every value is prime
  59. for (int i = 0; i <= 1e7; ++i)
  60. sieve[i] = i;
  61.  
  62. for (int i = 2; i * i <= 1e7; i++)
  63. {
  64. if (sieve[i] == i)
  65. {
  66. for (int j = i * i; j <= 1e7; j += i)
  67. {
  68. if (sieve[j] == j)
  69. sieve[j] = i; // bcz i is smallest prime no. dividing j
  70. }
  71. }
  72. }
  73. }
  74.  
  75. map<int, int> prime_fact(int n)
  76. {
  77. map<int, int> mp;
  78. if(n < 2)
  79. return mp;
  80.  
  81. while (n != 1)
  82. {
  83. mp[sieve[n]]++;
  84. n /= sieve[n];
  85. }
  86.  
  87. return mp;
  88. }
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.cpp:6:1: error: ‘vector’ does not name a type
 vector<bool> sieve(1e7 + 1, 1); // assign it as global variable
 ^~~~~~
prog.cpp:7:1: error: ‘vi’ does not name a type; did you mean ‘void’?
 vi prime;
 ^~
 void
prog.cpp: In function ‘void create_Sieve()’:
prog.cpp:10:5: error: ‘sieve’ was not declared in this scope
     sieve[0] = false, sieve[1] = false;
     ^~~~~
prog.cpp:10:5: note: suggested alternative: ‘signed’
     sieve[0] = false, sieve[1] = false;
     ^~~~~
     signed
prog.cpp:23:13: error: ‘prime’ was not declared in this scope
             prime.push_back(i);
             ^~~~~
prog.cpp: At global scope:
prog.cpp:27:1: error: ‘map’ does not name a type
 map<int, int> prime_fact(int n)
 ^~~
prog.cpp:55:1: error: ‘vector’ does not name a type
 vector<int> sieve(1e7 + 1); // stores smallest prime factor
 ^~~~~~
prog.cpp:56:6: error: redefinition of ‘void create_Sieve()’
 void create_Sieve()
      ^~~~~~~~~~~~
prog.cpp:8:6: note: ‘void create_Sieve()’ previously defined here
 void create_Sieve()
      ^~~~~~~~~~~~
prog.cpp: In function ‘void create_Sieve()’:
prog.cpp:60:9: error: ‘sieve’ was not declared in this scope
         sieve[i] = i;
         ^~~~~
prog.cpp:60:9: note: suggested alternative: ‘signed’
         sieve[i] = i;
         ^~~~~
         signed
prog.cpp:64:13: error: ‘sieve’ was not declared in this scope
         if (sieve[i] == i)
             ^~~~~
prog.cpp:64:13: note: suggested alternative: ‘signed’
         if (sieve[i] == i)
             ^~~~~
             signed
prog.cpp: At global scope:
prog.cpp:75:1: error: ‘map’ does not name a type
 map<int, int> prime_fact(int n)
 ^~~
stdout
Standard output is empty