#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(); } |
English