Pagini recente » Cod sursa (job #1903438) | Cod sursa (job #1120896) | Cod sursa (job #1188096) | Cod sursa (job #1427456) | Cod sursa (job #1562493)
#include <math.h>
#include <stdio.h>
#include <string.h>
#include <vector>
using namespace std;
#define MAX_SIZE 100
#define check(X, i) (i <= X[0] ? X[i] : 0)
#define A (*this)
class Mare: protected vector <int> {
static const int base = 1000000000, nbase = 9;
public:
Mare();
Mare(int);
void operator = (Mare&);
void operator += (Mare&);
void operator ++ (void);
void write (void);
};
/** Initializare. **/
Mare::Mare() {
this -> resize(MAX_SIZE) ;
}
Mare::Mare(int X) {
this -> resize(MAX_SIZE) ;
for (A[0] = 0; X; X /= base) {
A[++A[0]] = X % base;
}
}
/** A = B. **/
void Mare::operator = (Mare &B) {
int i;
A[0] = B[0];
for (i = 1; i <= A[0]; i++) {
A[i] = B[i];
}
}
/** A += B. **/
void Mare::operator += (Mare &B) {
int i, t = 0;
for (i = 1; (i <= A[0]) || (i <= B[0]) || (t != 0); i++, t /= base) {
A[i] = (t += check(A, i) + check(B, i)) % base;
}
A[0] = i - 1;
}
/** ++A. **/
void Mare::operator ++ (void) {
Mare B = 1 ;
A += B ;
}
/** Afiseaza A. **/
void Mare::write(void) {
int i;
if (A[0]) {
fprintf(stdout, "%d", A[A[0]]);
for (i = A[0] - 1; i; i--) {
fprintf(stdout, "%09d", A[i]) ;
}
} else {
fprintf(stdout, "0");
}
fputc('\n', stdout);
}
#define Smerenie 1000
int N;
Mare d[2][Smerenie + 1];
/** gcd(a, b). **/
int cmmdc(int a, int b) {
return b ? cmmdc(b, a % b) : a;
}
int main (void) {
int i, j, val, side = 0, write;
FILE *f = fopen("indep.in", "r");
/* Citirea datelor. */
fscanf(f, "%d", &N);
for (i = 1; i <= N; i++) {
fscanf(f, "%d", &val);
/* Programare dinamica pe 2 linii. */
write = (i & 1);
for (j = 1; j <= Smerenie; j++) {
d[write][j] = d[side][j];
}
for (j = 1; j <= Smerenie; j++) {
d[write][cmmdc(val, j)] += d[write][j];
}
++d[side = write][val];
}
fclose(f);
/* Afisarea solutiei. */
freopen("indep.out", "w", stdout);
d[side][1].write();
fclose(stdout);
/// Multumim Doamne!
puts("Doamne ajuta!");
return 0;
}