Imran_Mohammed

Sum of Divisor

Mar 3rd, 2021
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.38 KB | None | 0 0
  1. //In The Name Of Allah
  2. //Sum Of Divisor :(using prime factorization)
  3.  
  4. #include<bits/stdc++.h>
  5. using namespace std;
  6.  
  7. #define optimize() ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
  8. #define endl '\n'
  9.  
  10. //Prime Generation
  11. const long long mx = 1e6+123;
  12. bool is_prime[mx];
  13. vector<long long> prime;
  14.  
  15. void primegen ( long long n )
  16. {
  17.     for ( int i = 3; i <= n; i += 2 ) is_prime[i] = 1;
  18.  
  19.     int sq = sqrt ( n );
  20.     for ( int i = 3; i <= sq; i += 2 ) {
  21.         if ( is_prime[i] == 1 ) {
  22.             for ( int j = i*i; j <= n; j += ( i + i ) ) {
  23.                 is_prime[j] = 0;
  24.             }
  25.         }
  26.     }
  27.  
  28. is_prime[2]=1;
  29. prime.push_back(2);
  30.     for ( int i = 3; i <= n; i += 2 ) {
  31.         if ( is_prime[i] == 1 ) prime.push_back ( i );
  32.     }
  33. }
  34.  
  35. //prime Factorization
  36.  
  37. long long SOD(long long n){
  38.   long long ret = 1;
  39.     for( auto p:prime){
  40.         if( p*p > n)break;
  41.  
  42.         if(n%p == 0){
  43.          long long currentSum = 1;
  44.          long long powP = 1;
  45.  
  46.             while(n%p == 0){
  47.                 powP *= p;
  48.                 currentSum += powP;
  49.                 n = n/p;
  50.             }
  51.             ret *= currentSum;
  52.         }
  53.     }
  54.  
  55.     if(n > 1){
  56.         ret *= (1 + n);
  57.     }
  58.  
  59.     return ret;
  60. }
  61.  
  62. //main function
  63. int main()
  64. {
  65.     optimize()
  66.  
  67.     primegen(1e6);
  68.  
  69.     int n;
  70.     cin >> n;
  71.  
  72.     cout << SOD(n) << endl;
  73.  
  74.  
  75.     return 0;
  76. }
  77.  
Advertisement
Add Comment
Please, Sign In to add comment