func_code_string: #include <bits/stdc++.h>   using namespace std;   struct P {     long long x;     long long y;     bool operator<(const P &a) const { return y > a.y; }   };   vector<long long> v[3];   int a, c, i, b, n, m, k, d;   long long o[1333331];   int l[1111111];   int j[1111115];   int e[1111111];   int dx[10] = {0, 1, 0, -1, 1, 1, -1, -1}, dy[10] = {1, 0, -1, 0, 1, -1, 1, -1},       dz[10] = {0, 0, 0, 0, 1, -1};   long long x, y, mod = 1000000007, mod2 = 1000000009, mod3 = 2017;   long long z;   double pi = 3.14159265;   P u[1];   queue<int> q;   bool as(P a, P b) {     if (a.x != b.x) return a.x < b.x;     return a.y < b.y;   }   long long f(long long a, long long b) {     for (; b;) {       long long h = a;       a = b;       b = h % b;     }     return a;   }   int main() {     scanf( %d , &a);     for (int t = 1; t <= a; t++) scanf( %lld , &o[t]);     for (int t = 2; t <= a; t++) scanf( %d , &l[t]);     for (int t = a; t > 0; t--) o[l[t]] += o[t];     for (int t = a; t > 0; t--)       if (o[1] / f(o[1], o[t]) <= a) {         j[o[1] / f(o[1], o[t])]++;       }     for (int t = a; t > 0; t--) {       for (int h = t * 2; h <= a; h += t) j[h] += j[t];     }     for (int t = 1; t <= a; t++)       if (j[t] >= t) e[t] = 1;     for (int t = a; t > 0; t--)       if (e[t]) {         for (int h = t * 2; h <= a; e[t] %= mod, h += t) e[t] += e[h];       }     printf( %d  , e[1]);   }   