• + 0 comments

    My code in C++. O(sqrt(n)).

    int digsum(int x){
        int ret = 0;
        while(x){
            ret += (x % 10);
            x /= 10;
        }
        return ret;
    }
    
    void solve(){
        int n; cin >> n;
        pair<int,int> ans(0,0);
        for(int i=1; i*i<=n; i++){
            if(n % i == 0){
                int d1 = i, d2 = n / d1;
                pair<int, int> p1(digsum(d1), -d1);
                pair<int, int> p2(digsum(d2), -d2);
                ans = max(ans, p1);
                ans = max(ans, p2);
            }
        }
        cout << -ans.second << '\n';
    }