Language: C++

#include<bits/stdc++.h>
#define rep(i, n) for (int i=0;i<(n);i++)
using namespace std;
typedef long long int;

int mod;
int mod2;

struct mint{
    int x;
    mint (int x=0) : x((x%mod+mod)%mod){}//カッコの中で初期化している
    mint& operator+=(const mint a){//operatorは構造体同士の比較に用いられる
        if((x +=a.x)>=mod) x-=mod;
        return *this;//thisとは現在のオブジェクトのこと
    }
    mint& operator-=(const mint a){
        if((x +=mod-a.x)>=mod) x-=mod;
        return *this;
    }
    mint& operator*=(const mint a){
        (x*=a.x)%=mod;
        return *this;
    }
    mint operator+(const mint a){
        mint res(*this);
        return res+=a;
    }
    mint operator-(const mint a){
        mint res(*this);
        return res-=a;
    }
    mint operator*(const mint a){
        mint res(*this);
        return res*=a;
    }
    mint pow(int t) const{
        if(!t) return 1;
        mint a=pow(t>>1);
        a*=a;
        if(t&1) a*=*this;
        return a;
    }
    mint inv() const{
        return pow(mod-2);//逆元
    }
    mint&operator/=(const mint a) {
        return (*this)*=a.inv();
    }
    mint&operator/(const mint a) const{
    mint res(*this);
    return res/=a;
    }
};

struct mint2{
    int x;
    mint2 (int x=0) : x((x%mod2+mod2)%mod2){}//カッコの中で初期化している
    mint2& operator+=(const mint2 a){//operatorは構造体同士の比較に用いられる
        if((x +=a.x)>=mod2) x-=mod2;
        return *this;//thisとは現在のオブジェクトのこと
    }
    mint2& operator-=(const mint2 a){
        if((x +=mod2-a.x)>=mod2) x-=mod2;
        return *this;
    }
    mint2& operator*=(const mint2 a){
        (x*=a.x)%=mod2;
        return *this;
    }
    mint2 operator+(const mint2 a){
        mint2 res(*this);
        return res+=a;
    }
    mint2 operator-(const mint2 a){
        mint2 res(*this);
        return res-=a;
    }
    mint2 operator*(const mint2 a){
        mint2 res(*this);
        return res*=a;
    }
    mint2 pow(int t) const{
        if(!t) return 1;
        mint2 a=pow(t>>1);
        a*=a;
        if(t&1) a*=*this;
        return a;
    }
    mint2 inv() const{
        return pow(mod2-2);//逆元
    }
    mint2&operator/=(const mint2 a) {
        return (*this)*=a.inv();
    }
    mint2&operator/(const mint2 a) const{
    mint2 res(*this);
    return res/=a;
    }
};

int f(int n){
    int count = __builtin_popcount(n);
    return n%count+1;
}

int main(void){
    int n;
    cin>>n;
    string x;
    cin>>x;
    int pop_count = 0;
    rep(i, x.size()){
        if(x[i] == '1') pop_count++;
    }
    mod = (int)pop_count+1;
    mod2 = (int)pop_count-1;
    if(pop_count == 1){
        rep(i, n){
            if(x[n-1-i] == '1') cout<<0<<endl;
            else cout<<1<<endl;
        }
    }
    else if(pop_count == 0){
        rep(i, n) {
            cout<<1<<endl;
        }
    }
    else{
        //プラスの方
        mint now = 0;
        mint t = 1;
        vector<mint>beki(n);
        rep(i, n){
            beki[i]=t;
            if(x[n-1-i] == '1') now += t;
            t *= 2;
        }
        
        //マイナスの方
        mint2 now2 = 0;
        mint2 t2 = 1;
        vector<mint2>beki2(n);
        rep(i, n){
            beki2[i]=t2;
            if(x[n-1-i] == '1') now2 += t2;
            t2 *= 2;
        }
        
        rep(i, n){
            int k = n-1-i;
            if(x[i] == '1'){
                mint2 p = now2 - beki2[k]+mod2;
                int u = p.x;
                //cout<<u<<endl;
                int ans = f(u)+1;
                cout<<ans<<endl;
            }
            else{
                mint p = now + beki[k];
                int u = p.x;
                //cout<<u<<endl;
                int ans = f(u)+1;
                cout<<ans<<endl;
            }
        }
    }
    return 0;
}

Compiler output:
a.cc:4:19: error: declaration does not declare anything [-fpermissive]
    4 | typedef long long int;
      |                   ^~~