1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#include<cstdio>                                                                
#include<iostream>                                                              
#include<algorithm>                                                             
#include<string>                                                                
#include<vector>                                                                
#include<set>     
#include<cmath>                                                              
                                                                                
using namespace std;                                                            
                                                                                
typedef vector<int> VI;                                                         
typedef long long LL;                                                           
                                                                                
#define FOR(x, b, e) for(int x=b; x<=(e); ++x)                                  
#define FORD(x, b, e) for(int x=b; x>=(e); --x)                                 
#define REP(x, n) for(int x=0; x<(n); ++x)                                      
#define VAR(v, n) __typeof(n) v = (n)                                           
#define ALL(c) (c).begin(), (c).end()                                           
#define SIZE(x) ((int)(x).size())                                               
#define FOREACH(i, c) for(VAR(i, (c).begin()); i != (c).end(); ++i)             
#define PB push_back                                                            
#define ST first                                                                
#define ND second                                                               
                                                                                
class Primes {                                                                  
    int n;                                                                      
    VI primes;                                                                  
    public:                                                                     
                                                                                
    VI primeList(int n) {                                                       
        VI w(1, 2);                                                             
        int s = 0, i = 2;                                                       
        FOR(l, 3, n - 1) {                                                      
            i = 0;                                                              
            while (w[s] * w[s] <= l) s++;                                       
            while (i < s && l % w[i]) i++;                                      
            if (i == s) w.PB(l);                                                
        }                                                            
        return w;                                                               
    }                                                                           
                                                                                
    Primes(int n): n(n) {                                                       
        primes = primeList(n);                                   
    }                                                                           
                                                                                
    vector<pair<int, int> > getPrimesFactorial(int a) {                    
        vector<pair<int, int> > result; 
        if(a==1) {
            result.PB(make_pair(0,0));
            return result;
        }                                       
        int i = 0;                                                              
        while(a > 1 && i < primes.size()) {                                                          
            int d = 0;                                                          
            while(a % primes[i] == 0) {                                         
                a /= primes[i];                                                 
                d++;                                                            
            }                                                                   
            if(d>0) result.PB(make_pair(primes[i], d));                         
            i++;                                                                
        }
        if(a>1) result.PB(make_pair(a, 1));                                       
        return result;                                                          
    }                                                                           
                                                                                
    set<int> getDivisors(int a) {                                               
        set<int> result;
        for(int i=1;i<=sqrt(a);i++) {
            if(a%i==0) {
                result.insert(i);
                result.insert(a/i);
            }
        }                                           
        return result;                                                          
    }                                                                           
                                                                                
    int getDivisorsCount(int a) {                                      
        vector<pair<int, int> > prime_fact = getPrimesFactorial(a);             
        int result = 1;                                                         
        for(int i=0;i<prime_fact.size();i++) {                                  
            result *= prime_fact[i].second + 1;                                 
        }                                                                                     
        return result;                                                          
    }                                                                           
};                                                                              
                                                                                
class Solver {                                                                  
    int n;                                                                      
    public:                                                                     
                                                                                
    void readInput() {                                                          
        cin >> n;                                         
    }                                                                           
                                                                                
    void solve() {    
        if(n < 6) {
            cout << 0 << '\n';
            return;
        }                                                          
        Primes p((int)ceil(sqrt(n))+1);                                                            

        LL result = 0;                      
        for(auto d:p.getDivisors(n)) {
            if(n/d > 1) {
                int tmp = p.getDivisorsCount(n/d - 1) - 2;
                if((n/d-1)%2 == 0) tmp--;
                result += max(0,tmp);   
            }               
        }                                                                       
        cout << result << '\n';                                                 
    }                                                                           
};                                                                              
                                                                                
int main() {                                                                    
    ios_base::sync_with_stdio(0);                                               
    Solver solver;                                                              
    solver.readInput();                                                         
    solver.solve();                                                             
    return 0;                                                                   
}