Pagini recente » Cod sursa (job #448308) | Cod sursa (job #903328) | Cod sursa (job #1165962) | Cod sursa (job #2895028) | Cod sursa (job #1903283)
#include <fstream>
#include <iostream>
#include <algorithm>
#include <iomanip>
using namespace std;
ifstream f("indep.in");
ofstream g("indep.out");
#define MAX_N 500
#define CONST 1000
int N;
inline int gcd(int a, int b) {
int r;
while(b) {
r = a % b;
a = b;
b = r;
}
return a;
}
struct Number {
static const int Base = 10000;
static const int NR = 101;
int a[NR] = {0};
int ind = 1;
inline void add(Number b) {
int i, rest = 0;
for(i = 1;i <= a[0] || i <= b.a[0] || rest > 0;i++)
a[i] = (a[i] + b.a[i] + rest), rest = a[i] / Base, a[i] %= Base;
a[0] = i - 1;
}
inline void print() {
g << a[a[0]] << setprecision(4) << fixed;
for(int i = a[0] - 1;i > 0;i--)
g << a[i];
}
};
Number dp[CONST + 1], one;
int main() {
f >> N;
int v;
one.a[0] = 1, one.a[1] = 1;
for(int i = 1;i <= N;i++) {
f >> v;
for(int j = 1;j <= CONST;j++) {
dp[gcd(j, v)].add(dp[j]);
}
dp[v].add(one);
}
dp[1].print();
f.close();
g.close();
return 0;
}