Pagini recente » Cod sursa (job #2663357) | Cod sursa (job #2467530) | Cod sursa (job #2920737) | Cod sursa (job #3234095) | Cod sursa (job #385206)
Cod sursa(job #385206)
001.#include <stdio.h>
002.#include <math.h>
003.#include <string.h>
004.
005.
006.const char *fin = "fractii.in";
007.const char *fout = "fractii.out";
008.
009.
010.int vec[1000010];
011.typedef int bignum[15];
012.
013.
014.void set(bignum b, int n) {
015.
016.memset(b, 0, sizeof(bignum));
017.
018.if (!n) {
019.
020.return;
021.
022.}
023.
024.while(n) {
025.
026.b[++b[0]] = n % 10;
027.
028.n /= 10;
029.
030.}
031.}
032.
033.
034.void mult(bignum b, int x) {
035.
036.int t = 0;int i ;
037.
038.for (i = 1; i <= b[0]; ++i) {
039.
040.b[i] = b[i] * x + t;
041.
042.t = b[i] / 10;
043.
044.b[i] %= 10;
045.
046.}
047.
048.while (t) {
049.
050.b[++b[0]] = t % 10;
051.
052.t /= 10;
053.
054.}
055.}
056.
057.
058.void add(bignum b, bignum a) {
059.
060.int t = 0;
061.
062.if (a[0] > b[0]) {
063.
064.b[0] = a[0];
065.
066.}int i;
067.
068.for (i = 1; i <= b[0]; ++i) {
069.
070.b[i] += a[i] + t;
071.
072.t = b[i] / 10;
073.
074.b[i] %= 10;
075.
076.}
077.
078.if (t) {
079.
080.b[++b[0]] = t;
081.
082.}
083.}
084.
085.
086.void sub(bignum b, bignum a) {
087.
088.int i,t = 0;
089.
090.for(i = 1; i <= b[0]; ++i) {
091.
092.if (a[i] + t > b[i]) {
093.
094.b[i] = (10 + b[i] - a[i] - t) % 10;
095.
096.t = 1;
097.
098.} else {
099.
100.b[i] -= a[i] + t;
101.
102.t = 0;
103.
104.}
105.
106.}
107.
108.while(!b[b[0]]) {
109.
110.b[0]--;
111.
112.}
113.}
114.
115.
116.void sum(int k, bignum rez) {
117.
118.set(rez, 0);int i;
119.
120.for ( i = 2; i <= k; ++i) {
121.
122.if (vec[i] != -1) {
123.
124.int d = k / i;
125.
126.bignum g;
127.
128.set(g, d);
129.
130.mult(g, d);
131.
132.if(vec[i] > -1) {
133.
134.mult(g, vec[i] + 1);
135.
136.add(rez, g);
137.
138.} else {
139.
140.mult(g, -vec[i] - 1);
141.
142.sub(rez, g);
143.
144.}int j;
145.
146.for (j = 2 * i; j <= k; j += i) {
147.
148.vec[j] -= (vec[i] + 1);
149.
150.}
151.
152.}
153.
154.}
155.}
156.
157.
158.int main(){
159.
160.FILE *f = fopen(fin, "rt");
161.
162.int n;
163.
164.fscanf(f, "%d", &n);
165.
166.fclose(f);
167.
168.
169.
170.f = fopen(fout, "wt");
171.
172.bignum nn, re;
173.
174.set(nn, n);
175.
176.mult(nn, n);
177.
178.sum(n, re);
179.
180.sub(nn, re);
181.int i;
182.
183.for(i = nn[0]; i > 0; --i) {
184.
185.fprintf(f, "%d", nn[i]);
186.
187.}
188.
189.
190.
191.fclose(f);
192.
193.return 0;
194.}