Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define ios ios::sync_with_stdio(0); cin.tie(NULL); cout.tie(NULL)
- #define pb push_back
- #define mp make_pair
- #define fi first
- #define se second
- #define enter cout << '\n'
- using namespace std;
- typedef long long ll;
- typedef pair <int, int> pii;
- typedef pair <ll, ll> pll;
- typedef vector <int> vi;
- typedef vector <pii> vii;
- typedef vector <ll> vl;
- typedef vector <pll> vll;
- typedef queue <int> qi;
- typedef queue <pii> qii;
- typedef queue <ll> ql;
- typedef queue <pll> qll;
- const int INF = 0x3f3f3f3f;
- const int MOD = 1e9 + 9;
- const double EPSILON = 1e-10;
- const int NMAX = 1e4 + 5;
- int prime[143] = {101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
- 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389,
- 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563,
- 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727,
- 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907,
- 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997};
- map <int, bool> isprime;
- int n, cnt, cntb;
- ll dp[NMAX][10];
- ll mem(int root, int poz)
- {
- if (poz == n)
- {
- return 1;
- }
- if (dp[root][poz])
- {
- return dp[root][poz];
- }
- for (int i = 0; i < 10; ++i)
- if (root / 10 % 10 && isprime[(root % 100) * 10 + i])
- dp[root][poz] = (1LL * dp[root][poz] + 1LL * mem((root % 100) * 10 + i, poz + 1)) % MOD;
- while (dp[root][poz] < 0) dp[root][poz] += MOD;
- return dp[root][poz];
- }
- /*
- void brute(int root, int poz)
- {
- if (poz == n)
- {
- cntb = (cntb + 1) % MOD;
- return;
- }
- for (int i = 0; i < 10; ++i)
- if (root / 10 % 10 && isprime[(root % 100) * 10 + i])
- brute((root % 100) * 10 + i, poz + 1);
- }
- */
- int main()
- {
- for (int i = 0; i < 143; ++i)
- isprime[prime[i]] = true;
- for (int i = 3; i < 10000; ++i)
- {
- n = i;
- cnt = cntb = 0;
- // memset(dp, 0, sizeof(dp));
- for (int i = 0; i < 143; ++i)
- {
- memset(dp, 0, sizeof(dp));
- cnt += mem(prime[i], 3);
- // while (cnt < 0) cnt += MOD;
- }
- // for (int i = 0; i < 143; ++i)
- // brute(prime[i], 3);
- // if (cnt != cntb)
- // {
- cout << i << " " << cnt << "\n";
- // break;
- //}
- //else cout << "DA! " << i << endl;
- }
- /*
- cin >> n;
- for (int i = 0; i < 143; ++i)
- {
- memset(dp, 0, sizeof(dp));
- cnt += mem(prime[i], 3);
- }
- while (cnt < 0) cnt += MOD;
- cout << cnt;
- */
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement