# include using namespace std; int a[5]; int pat[1000005]; int txt[1000005]; int lps[1000005]; int makeit(int v,int k) { int i,j; int br=0,p,q; for(i=1;i<=k;i++) { p = v; while(p!=0) { if(p%10==a[i])br++; p/=10; } p=v; while(p%a[i]==0) { br++; p/=a[i]; } } return br; } void computeLPSArray( int M) { // length of the previous longest prefix suffix int len = 0; lps[0] = 0; // lps[0] is always 0 // the loop calculates lps[i] for i = 1 to M-1 int i = 1; while (i < M) { if (pat[i] == pat[len]) { len++; lps[i] = len; i++; } else // (pat[i] != pat[len]) { // This is tricky. Consider the example. // AAACAAAA and i = 7. The idea is similar // to search step. if (len != 0) { len = lps[len - 1]; // Also, note that we do not increment // i here } else // if (len == 0) { lps[i] = 0; i++; } } } } int KMPSearch(int M,int N) { // create lps[] that will hold the longest prefix suffix // values for pattern // Preprocess the pattern (calculate lps[] array) computeLPSArray( M); int i = 0; // index for txt[] int j = 0; // index for pat[] while (i < N) { // cout<>n; for(i=1;i<=n;i++) { cin>>a[i]; } cin>>m; for(i=0;i>pat[i]; //computeLPSArray(m); for(i=1;i<=1000000;i++) { txt[i-1]=makeit(i,n); // cout<