Pagini recente » Cod sursa (job #1046578) | Cod sursa (job #3131915) | Cod sursa (job #938443) | Cod sursa (job #544588) | Cod sursa (job #2641637)
#include <iostream>
#include <cstdio>
using namespace std;
const int MAXCF = 350;
const int MAX = 1000;
class Huge {
private:
int cf[MAXCF];
public:
Huge(int x = 0) {
if(!x)
cf[0] = 1;
while(x) {
cf[0]++;
cf[cf[0]] = x % 10;
x /= 10;
}
}
const Huge operator = (const Huge &dr) {
for(int i = 0; i <= dr.cf[0]; i++)
cf[i] = dr.cf[i];
return *this;
}
const Huge operator + (Huge &dr) {
Huge ans = Huge();
ans.cf[0] = max(cf[0], dr.cf[0]);
for(int i = cf[0] + 1; i <= ans.cf[0]; i++) cf[i] = 0;
for(int i = dr.cf[0] + 1; i <= ans.cf[0]; i++) dr.cf[i] = 0;
int r = 0;
for(int i = 1; i <= ans.cf[0]; i++) {
ans.cf[i] = cf[i] + dr.cf[i] + r;
r = ans.cf[i] / 10;
ans.cf[i] %= 10;
}
if(r)
ans.cf[++ans.cf[0]] = r;
return ans;
}
void print() {
for(int i = cf[0]; i >= 1; i--)
printf("%d", cf[i]);
}
};
Huge prev_dp[MAX + 5], crt_dp[MAX + 5];
int cmmdc(int a, int b) {
int r = 0;
while(b) {
r = a % b;
a = b;
b = r;
}
return a;
}
int main() {
freopen("indep.in", "r", stdin);
freopen("indep.out", "w", stdout);
int n, x;
scanf("%d", &n);
prev_dp[0] = crt_dp[0] = 1;
for(int i = 1; i <= n; i++) {
scanf("%d", &x);
for(int i = 0; i <= MAX; i++) {
int aux = cmmdc(x, i);
crt_dp[aux] = crt_dp[aux] + prev_dp[i]; /// adaug x la toate subsirurile cu cmmdc-ul i
}
for(int i = 0; i <= MAX; i++)
prev_dp[i] = crt_dp[i];
}
prev_dp[1].print();
return 0;
}