fork download
  1. //Pratik Dayama - PRIMPAL
  2. #include <iostream>
  3. using namespace std;
  4. #define MOD 1000000007
  5.  
  6. //prime[k] is number of primes with k+1 digits
  7. //should be precomputed separately or taken from the internet
  8. int prime[9] = {4, 25, 168, 1229, 9592, 78498, 664579, 5761455, 50847534};
  9.  
  10. //calculate 10^exp using exponentiation by squaring
  11. long long pow10(long long exp) {
  12. long long ans = 1, base = 10;
  13. while(exp > 0) {
  14. if(exp & 1)
  15. ans = (ans*base) % MOD;
  16. base = (base*base) % MOD;
  17. exp >>= 1;
  18. }
  19. return ans % MOD;
  20. }
  21.  
  22. int main() {
  23. int t;
  24. long long n, k;
  25. cin >> t;
  26. while(t--) {
  27. cin >> n >> k;
  28. if(n == k+1) //we know there are 9 palindromes of length 1
  29. cout << 9 * prime[k-1] << '\n';
  30. else //there are 9 * 10^((x-1)/2) palindromes of length x
  31. cout << (9 * prime[k-1] * pow10((n-k-1)/2)) % MOD << '\n';
  32. }
  33. return 0;
  34. }
Success #stdin #stdout 0s 3144KB
stdin
2
2 1
4 2
stdout
36
225