Pagini recente » Cod sursa (job #685736) | Cod sursa (job #1382753) | Cod sursa (job #1580150) | Cod sursa (job #569940) | Cod sursa (job #1838197)
#include <iostream>
#include <fstream>
#include <string>
#define MAXSIZE 200
#define MAXK 100
#define MOD 30103
using namespace std;
int D[2][MAXSIZE + 1][MAXK + 1];
int mod10[MAXSIZE + 1];
string N;
int aup, aud;
void precalc() {
mod10[0] = 1;
for (int i = 1 ; i <= MAXSIZE ; ++i) {
mod10[i] = 10 * mod10[i - 1];
if (mod10[i] >= MOD)
mod10[i] %= MOD;
}
}
inline int prodmod(int x, int y, int mod) {
aup = x * y;
if (aup >= mod)
aup %= mod;
return aup;
}
inline int minusmod(int x, int y, int mod) {
aud = x - y;
if (aud < 0)
aud += mod;
return aud;
}
int main () {
ifstream cin("diviz.in");
ofstream cout("diviz.out");
int k, a, b;
cin >> k >> a >> b >> N;
int n = N.size();
precalc();
D[0][1][(N[n - 1] - '0') % k] = 1;
for (int i = n - 2 , l = 1 ; i >= 0 ; --i, l ^= 1) {
D[l][1][(N[i] - '0') % k] = 1;
for (int j = 2 ; j <= n - i ; ++j)
for (int t = 0 ; t < k ; ++t) {
D[l][j][t] = D[1 - l][j][t] + D[1 - l][j - 1][minusmod(t, prodmod(N[i] - '0', mod10[j - 1], k), k)];
if (D[l][j][t] >= MOD)
D[l][j][t] -= MOD;
}
}
int sol = 0;
for (int j = a ; j <= b ; ++j) {
sol += D[!(n & 1)][j][0];
if (sol >= MOD)
sol -= MOD;
}
cout << sol << "\n";
return 0;
}