Pagini recente » Cod sursa (job #3220894) | Cod sursa (job #1362722) | Cod sursa (job #327588) | Cod sursa (job #3173108) | Cod sursa (job #978492)
Cod sursa(job #978492)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define NMAX 100000
int A[NMAX], B[NMAX], C[NMAX];
void add(int *a, int *b) {
int i, t = 0;
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;
}
void mul(int *a, int *b) {
int i, j, t = 0, C[NMAX];
memset(C, 0, sizeof(C));
for (i = 1; i <= a[0]; i++) {
for (t = 0, j = 1; j <= b[0] || t; j++, t /= 10) {
C[i+j-1] = (t += C[i+j-1] + a[i] * b[j]) % 10;
}
if (i + j - 2 > C[0])
C[0] = i + j - 2;
}
memcpy(a, C, sizeof(C));
}
void logExp(int *a, int n) {
if (n == 0) {
a[0] = 1;
a[1] = 1;
return;
}
if (n == 1)
return;
int t[NMAX];
memcpy(t, a, sizeof(int) * NMAX);
a[0] = 1;
a[1] = 1;
while (1) {
if (n % 2)
mul(a, t);
n /= 2;
if (n == 0)
break;
mul(t,t);
}
}
int main() {
freopen("patrate2.in", "r", stdin);
freopen("patrate2.out", "w", stdout);
int i, n;
scanf("%d", &n);
A[0] = 1;
A[1] = 2;
logExp(A, n * n + 1);
for (i = A[0]; i > 0; i--)
printf("%d", A[i]);
return 0;
}