Cod sursa(job #2332706)

Utilizator AxellApostolescu Alexandru Axell Data 31 ianuarie 2019 03:37:28
Problema Suma divizorilor Scor 0
Compilator c-64 Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <stdio.h>
#include <stdlib.h>

int pow_raised(int base, int n) {
	int result = 1;
	while (1) {
		if (n & 1) {
			result *= base;
		}
		n >>= 1;
		if (!n) {
			break;
		}
		base *= base;
	}
	return result;
}

int divizori(int a, int n) {
	int sum = 0, tmp;
	for (int i = 2; i <= a ; ++i) {
		tmp = pow_raised(i, n + 1) - 1;
		tmp /= (i - 1);
		sum += tmp;
	}
	printf("%d\n", sum);
	return sum % 9901;
}

int main() {
	FILE *in, *out;
	if (((in = fopen("sumdiv.in", "rt")) == NULL)) {
		printf("Nu am putut deschide fisierul de input!");
		return -1;
	}
	if (((out = fopen("sumdiv.out", "wt")) == NULL)) {
		printf("Nu am putut deschide fisierul de output!");
		return -2;
	}
	int a, n;
	fscanf(in, "%d %d", &a, &n);
	fprintf(out, "%d\n", divizori(a, n));
	// Freeing the memory
	fclose(in);
	fclose(out);
	return 0;
}