Pagini recente » Cod sursa (job #2002750) | Cod sursa (job #2396010) | Cod sursa (job #2310546) | Cod sursa (job #2875090) | Cod sursa (job #2199964)
#include <cstdio>
#include <cstring>
using namespace std;
int gcd(int a, int b) {
while (b) {
int r = a % b;
a = b;
b = r;
}
return a;
}
const int Base = 1.e6;
class Big{
enum { MAX = 50 };
int x[MAX];
int n;
public:
Big(int nr = 0);
int& operator [] (int i) { return x[i]; }
friend Big operator * (Big A, int B);
friend Big operator + (Big o1, Big o2);
void afis() {
printf("%d",x[n]);
for ( int i = n - 1; i >= 1; --i)
printf("%06d", x[i]);
}
};
Big dp[1005];
int main() {
freopen("indep.in", "r", stdin);
freopen("indep.out", "w", stdout);
int n;
scanf("%d", &n);
int k = 1;
for (int i = 1; i <= n; ++i) {
int x;
scanf("%d", &x);
for (int j = 1; j <= 1000; ++j)
dp[gcd(j, x)] = dp[gcd(j,x)] + dp[j];
dp[x]=dp[x] + k;
}
dp[1].afis();
return 0;
}
Big operator + (Big a, Big b)
{
Big c; int i, t = 0;
for (i = 1; i <= a.n or i <= b.n or t; ++i, t /= Base)
c[i] = (t += a[i] + b[i]) % Base;
c.n = i - 1;
return c;
}
Big operator * (Big a, int b)
{
Big c; int i, t = 0;
if ( b == 0 ) return c;
for (i = 1; i <= a.n or t; ++i, t /= Base)
c[i] = (t += a[i] * b) % Base;
c.n = i - 1;
return c;
}
Big::Big(int nr) {
memset(x, 0, sizeof(x)); n = 0;
while ( nr ) {
x[++n] = nr % Base; nr /= Base ;
}
}