#include<bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; #define rep(a, b) for(int a = 0; a < (b); ++a) #define st first #define nd second #define pb push_back #define all(a) a.begin(), a.end() const ll N=1e18, LIM=1e5+7; vector<ll>P, W, pi={2, 3, 5, 7}; map<ll,ll>mp; ll dp[LIM][19]; ll f(ll x) { ll p=1; while(x) { p*=x%10; x/=10; } return p; } ll g(ll x) { while(x>=10) x=f(x); return x; } void gen(ll n, int x) { if(x==pi.size()) { P.pb(n); return; } gen(n, x+1); while(n<=(N-1)/pi[x]) { n*=pi[x]; gen(n, x+1); } } void solve() { ll n; cin >> n; vector<ll>ans(10); ans[0]=n; if(g(n)!=0) ++ans[g(n)]; if(n==N) --n; vector<ll>cyfry; while(n) { cyfry.pb(n%10); n/=10; } rep(i, P.size()) if(dp[i][18] && W[i]) { for(int j=1; j<cyfry.size(); ++j) ans[W[i]]+=dp[i][j]; int akt=i; for(int j=(int)cyfry.size()-1; j>=0; --j) { for(int k=1; k<cyfry[j]; ++k) if(P[akt]%k==0) { int x=mp[P[akt]/k]; ans[W[i]]+=dp[x][j]; } if(cyfry[j]==0 || P[akt]%cyfry[j]!=0) break; akt=mp[P[akt]/cyfry[j]]; } } rep(i, 9) ans[0]-=ans[i+1]; for(auto i : ans) cout << i << " "; cout << '\n'; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); gen(1, 0); sort(all(P)); rep(i, P.size()) mp[P[i]]=i; dp[0][0]=1; for(ll k=1; k<=18; ++k) { rep(i, P.size()) { for(ll j=1; j<=9; ++j) if(P[i]%j==0) { dp[i][k]+=dp[mp[P[i]/j]][k-1]; } } } rep(i, P.size()) W.pb(g(P[i])); int _=1; cin >> _; while(_--) solve(); }
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 | #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; #define rep(a, b) for(int a = 0; a < (b); ++a) #define st first #define nd second #define pb push_back #define all(a) a.begin(), a.end() const ll N=1e18, LIM=1e5+7; vector<ll>P, W, pi={2, 3, 5, 7}; map<ll,ll>mp; ll dp[LIM][19]; ll f(ll x) { ll p=1; while(x) { p*=x%10; x/=10; } return p; } ll g(ll x) { while(x>=10) x=f(x); return x; } void gen(ll n, int x) { if(x==pi.size()) { P.pb(n); return; } gen(n, x+1); while(n<=(N-1)/pi[x]) { n*=pi[x]; gen(n, x+1); } } void solve() { ll n; cin >> n; vector<ll>ans(10); ans[0]=n; if(g(n)!=0) ++ans[g(n)]; if(n==N) --n; vector<ll>cyfry; while(n) { cyfry.pb(n%10); n/=10; } rep(i, P.size()) if(dp[i][18] && W[i]) { for(int j=1; j<cyfry.size(); ++j) ans[W[i]]+=dp[i][j]; int akt=i; for(int j=(int)cyfry.size()-1; j>=0; --j) { for(int k=1; k<cyfry[j]; ++k) if(P[akt]%k==0) { int x=mp[P[akt]/k]; ans[W[i]]+=dp[x][j]; } if(cyfry[j]==0 || P[akt]%cyfry[j]!=0) break; akt=mp[P[akt]/cyfry[j]]; } } rep(i, 9) ans[0]-=ans[i+1]; for(auto i : ans) cout << i << " "; cout << '\n'; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); gen(1, 0); sort(all(P)); rep(i, P.size()) mp[P[i]]=i; dp[0][0]=1; for(ll k=1; k<=18; ++k) { rep(i, P.size()) { for(ll j=1; j<=9; ++j) if(P[i]%j==0) { dp[i][k]+=dp[mp[P[i]/j]][k-1]; } } } rep(i, P.size()) W.pb(g(P[i])); int _=1; cin >> _; while(_--) solve(); } |