Pagini recente » Cod sursa (job #896425) | Cod sursa (job #53273) | Cod sursa (job #364103) | Cod sursa (job #912738) | Cod sursa (job #385203)
Cod sursa(job #385203)
#include <stdio.h>
#include <math.h>
#include <string.h>
const char *fin = "fractii.in";
const char *fout = "fractii.out";
int vec[1000010];
typedef int bignum[15];
void set(bignum b, int n) {
memset(b, 0, sizeof(bignum));
if (!n) {
return;
}
while(n) {
b[++b[0]] = n % 10;
n /= 10;
}
}
void mult(bignum b, int x) {
int t = 0;int i ;
for (i = 1; i <= b[0]; ++i) {
b[i] = b[i] * x + t;
t = b[i] / 10;
b[i] %= 10;
}
while (t) {
b[++b[0]] = t % 10;
t /= 10;
}
}
void add(bignum b, bignum a) {
int t = 0;
if (a[0] > b[0]) {
b[0] = a[0];
}int i;
for (i = 1; i <= b[0]; ++i) {
b[i] += a[i] + t;
t = b[i] / 10;
b[i] %= 10;
}
if (t) {
b[++b[0]] = t;
}
}
void sub(bignum b, bignum a) {
int i,t = 0;
for(i = 1; i <= b[0]; ++i) {
if (a[i] + t > b[i]) {
b[i] = (10 + b[i] - a[i] - t) % 10;
t = 1;
} else {
b[i] -= a[i] + t;
t = 0;
}
}
while(!b[b[0]]) {
b[0]--;
}
}
void sum(int k, bignum rez) {
set(rez, 0);int i;
for ( i = 2; i <= k; ++i) {
if (vec[i] != -1) {
int d = k / i;
bignum g;
set(g, d);
mult(g, d);
if(vec[i] > -1) {
mult(g, vec[i] + 1);
add(rez, g);
} else {
mult(g, -vec[i] - 1);
sub(rez, g);
}int j;
for (j = 2 * i; j <= k; j += i) {
vec[j] -= (vec[i] + 1);
}
}
}
}
int main(){
FILE *f = fopen(fin, "rt");
int n;
fscanf(f, "%d", &n);
fclose(f);
f = fopen(fout, "wt");
bignum nn, re;
set(nn, n);
mult(nn, n);
sum(n, re);
sub(nn, re);
int i;
for(i = nn[0]; i > 0; --i) {
fprintf(f, "%d", nn[i]);
}
fclose(f);
return 0;
}