Pagini recente » Cod sursa (job #1830083) | Cod sursa (job #1982158) | Cod sursa (job #188065) | Cod sursa (job #2590428) | Cod sursa (job #1348495)
#include <fstream>
using namespace std;
ifstream fin ("indep.in");
ofstream fout ("indep.out");
const int N = 505, Nr = 1005, cifre = 50, base = 1e9;
class big {
public:
int a[cifre];
big() {
for (int i = 0; i < cifre; ++i)
a[i] = 0;
}
void increase(int *b) {
int t = 0;
for (int i = 1; i <= (a[0] > b[0] ? a[0] : b[0]) + 1; ++i) {
int tmp = a[i] + b[i] + t;
a[i] = tmp % base;
t = (tmp > base - 1) ? 1 : 0;
}
int MAX = a[0] < b[0] ? b[0] : a[0];
a[0] = a[MAX+1] ? (MAX+1) : MAX;
}
void increase () {
int i = 1;
a[i]++;
while (a[i] == base) {
a[i] = 0;
a[++i]++;
}
if (i)
a[0] = max(a[0], i);
}
void display() {
if (!a[0]) {
fout << 0;
return;
}
for (int i = a[0]; i; --i)
fout << a[i];
}
} d[N][Nr];
int n;
int gcd(int a, int b) {
if (!b)
return a;
else
return gcd(b, a % b);
}
int main() {
fin >> n;
for (int x, i = 1; i <= n; ++i) {
fin >> x;
for (int j = 1; j <= Nr; ++j) {
d[i][gcd(x, j)].increase (d[i-1][j].a);
d[i][j].increase(d[i-1][j].a);
}
d[i][x].increase();
}
d[n][1].display();
}