Pagini recente » Cod sursa (job #2267456) | Rating Onescu Iancu (onescu.iancu) | Cod sursa (job #2738603) | Cod sursa (job #1494554) | Cod sursa (job #2200052)
#include <fstream>
#include <cstring>
using namespace std;
ifstream cin ("indep.in");
ofstream cout ("indep.out");
const int lmax = 160;
const int vmax = 1000;
int n, x;
int unu[1 + lmax];
int dp[1 + vmax][1 + lmax];
int cmmdc(int a, int b) {
int r;
while(b) {
r = a % b;
a = b;
b = r;
}
return a;
}
void add(int a[], int b[]) {
int t = 0, i;
for(i = 1; i <= a[0] || i <= b[0] || t; i++, t /= 10)
a[i] = (t += a[i] + b[i]) % 10;
a[0] = i - 1;
}
int main() {
cin >> n;
// dp[i][j] = nr de subsiruri formate din primele i elemente care au cmmdc-ul j
unu[0] = unu[1] = 1;
for(int i = 1; i <= n; i++) {
cin >> x;
for(int j = 1; j <= vmax; j++)
add(dp[cmmdc(j, x)], dp[j]);
add(dp[x], unu); // elementul insusi
}
for(int i = dp[1][0]; i >= 1; i--)
cout << dp[1][i];
if(dp[1][0] == 0)
cout << 0;
return 0;
}