func_code_string: #include <bits/stdc++.h>   using namespace std;   long long mod(long long a, long long b) {     if (a % b < 0) {       return a % b + b;     }     return a % b;   }   long long mod_exp(long long a, long long b, long long c) {     long long res = 1;     a = a % c;     while (b > 0) {       if (b % 2 == 1) {         res = (res * a) % c;       }       b /= 2;       a = (a * a) % c;     }     return res;   }   long long mymod(long long a, long long b) { return ((a % b) + b) % b; }   bool prime[200001];   void SieveOfEratosthenes() {     memset(prime, true, sizeof(prime));     prime[1] = false;     for (int p = 2; p * p <= 200000; p++) {       if (prime[p] == true) {         for (int i = p * p; i <= 200000; i += p) prime[i] = false;       }     }     return;   }   long long powe[200005];   void power() {     powe[0] = 1;     for (long long i = 1; i < 200005; i++) {       powe[i] = mymod(2 * powe[i - 1], 1000000007);     }   }   long long gcdExtended(long long, long long, long long *, long long *);   long long modInverse(long long a, long long m) {     long long x, y;     long long g = gcdExtended(a, m, &x, &y);     long long res = (x % m + m) % m;     return res;   }   long long gcdExtended(long long a, long long b, long long *x, long long *y) {     if (a == 0) {       *x = 0, *y = 1;       return b;     }     long long x1, y1;     long long gcd = gcdExtended(b % a, a, &x1, &y1);     *x = y1 - (b / a) * x1;     *y = x1;     return gcd;   }   long long n;   struct node {     vector<long long> adj;     long long colour;   };   int main() {     ios_base::sync_with_stdio(false);     cin.tie(NULL);     cout.tie(NULL);     long long n;     cin >> n;     string second;     cin >> second;     long long count[36001] = {0};     for (long long i = 0; i < second.size(); i++) {       long long sum = 0;       for (long long j = i; j < second.size(); j++) {         sum += (second[j] - 48);         if (sum <= 36000) {           count[sum]++;         } else           break;       }     }     vector<long long> factors;     for (long long i = 1; i < sqrt(n); i++) {       if (n % i == 0) {         factors.push_back(i);         factors.push_back(n / i);       }     }     if ((long long)(sqrt(n)) * (long long)(sqrt(n)) == n)       factors.push_back((long long)(sqrt(n)));     long long ans = 0;     if (n == 0) {       long long p = second.size();       long long ways0 = count[0];       long long waysn0 = (p * (p + 1)) / 2 - count[0];       ans = 2 * ways0 * waysn0 + ways0 * ways0;       cout << ans << endl;       exit(0);     }     for (auto x : factors) {       if (x <= 36000 && (n / x) <= 36000) ans += (count[x] * count[n / x]);     }     cout << ans << endl;     return 0;   }   