Pagini recente » Cod sursa (job #1032409) | Cod sursa (job #1072303) | Cod sursa (job #61001) | Cod sursa (job #1828443) | Cod sursa (job #1234709)
#include <fstream>
#include <iomanip>
#include <cstring>
using namespace std;
const int NMAX = 505, GCDMAX = 1000;
class LargeInt {
private:
static const long long base = 1000000000000000000;
long long digit[9];
int size;
public:
LargeInt() {
size = 1;
digit[0] = 0;
}
void operator=(int x) {
size = 1;
digit[0] = x;
}
void operator+=(const LargeInt &other) {
if (other.size > size) {
memset(digit + size, 0, (other.size - size) << 2);
size = other.size;
}
int rest, i;
for (rest = 0, i = 0; i < other.size; ++i) {
digit[i] += other.digit[i] + rest;
rest = digit[i] / base;
digit[i] %= base;
}
while (rest) {
if (i == size)
digit[size++] = 0;
digit[i] += rest;
rest = digit[i] / base;
digit[i] %= base;
++i;
}
}
void print(ostream &os) {
for (int i = size - 1; i >= 0; --i)
os << digit[i] << setfill('0') << setw(18);
}
} dp[NMAX][GCDMAX];
int N, a[NMAX];
ifstream fin("indep.in");
ofstream fout("indep.out");
int Cmmdc(const int a, const int b) {
if (!b)
return a;
return Cmmdc(b, a % b);
}
int main() {
fin >> N;
for (int i = 1; i <= N; ++i) {
fin >> a[i];
dp[i][a[i]] = 1;
for (int j = 1; j < GCDMAX; ++j) {
dp[i][Cmmdc(j, a[i])] += dp[i - 1][j];
dp[i][j] += dp[i - 1][j];
}
}
dp[N][1].print(fout);
return 0;
}