#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
const int N = 1010, M = 1e5 + 10, MOD = 1e9 + 7;
int n;
int a[N];
int f[N];
bool v[M];
vector<int> q[M];
int main()
{
for (int i = 1; i < M; i ++ )
for (int j = i * 2; j < M; j += i )
q[j].push_back(i);
cin >> n;
for (int i = 0; i < n; i ++ ) cin >> a[i];
f[0] = 1;
for (int i = 1; i < n; i ++ )
{
memset(v, 0, sizeof v);
for (int j = i - 1; j >= 0; j -- )
{
int d = a[i] - a[j], cnt = 0;
for (int k : q[d])
{
if (!v[k])
{
cnt ++ ;
v[k] = 1;
}
}
v[d] = 1;
f[i] = (f[i] + (long long)f[j] * cnt) % MOD;
}
}
cout << f[n - 1] << endl;
return 0;
}
讲得很清楚