Pagini recente » Cod sursa (job #2612920) | Cod sursa (job #534009) | Cod sursa (job #1862776) | Cod sursa (job #2602481) | Cod sursa (job #496913)
Cod sursa(job #496913)
#include<fstream>
#include<iomanip>
#define nmax 505
#define imax 1005
#define r 1000000000
using namespace std;
unsigned int a[nmax], c1[imax][100], c2[imax][100], v[100];
ofstream g("indep.out");
int cmmdc(int a, int b){
int rr = a%b;
while (rr != 0){
a = b;
b = rr;
rr = a%b;
}
return b;
}
void add(unsigned int a[], unsigned int b[]){
int t = 0, i;
for (i = 1; i <= a[0] || i <= b[0] || t != 0; i++){
t = a[i] + b[i] + t;
a[i] = t%r;
t = t/r;
}
a[0] = --i;
}
void afisare(unsigned int a[]){
g << a[a[0]];
for (int i = a[0]-1; i >= 1; i--)
g << setw(9) << setfill('0') << a[i];
}
int main(){
ifstream f("indep.in");
int n;
f >> n;
int i, j, k;
int max = 0;
for (i = 1; i <= n; i++){
f >> a[i];
if (a[i] > max)
max = a[i];
}
c1[a[1]][0] = 1;
c1[a[1]][1] = 1;
c2[a[1]][0] = 1;
c2[a[1]][1] = 1;
v[0] = 1;
v[1] = 1;
for (i = 2; i <= n; i++){
add(c2[a[i]], v);
for (j = 1; j <= max; j++){
k = cmmdc(a[i], j);
//c2[k] = c2[k] + c1[j];
add(c2[k], c1[j]);
}
for (j = 1; j <= max; j++)
for (int t = 0; t <= c2[j][0]; t++)
c1[j][t] = c2[j][t];
}
afisare(c2[1]);
return 0;
}