Cod sursa(job #1460598)

Utilizator mouse_wirelessMouse Wireless mouse_wireless Data 13 iulie 2015 12:38:24
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#include <vector>
using namespace std;

vector<int> primes;

typedef long long LL;

#define MILLION 1000000
#define MODNR 9973

void ciur() {
	vector<char> marked(MILLION + 10, 0);
	primes.push_back(2);
	for (int i = 3; i <= MILLION; i+=2)
	if (!marked[i]) {
		primes.push_back(i);
		for (int j = i; j <= MILLION; j += i)
			marked[j] = 1;
	}
}

LL fexp(int x, int p) {
	if (p == 1)
		return LL(x);
	LL aux = fexp(x, p / 2);
	if (p % 2)
		return aux*aux*LL(x);
	return aux*aux;
}

int main() {
	freopen("ssnd.in", "r", stdin);
	freopen("ssnd.out", "w", stdout);
	primes.reserve(100000);
	ciur();
	int t;
	scanf("%d", &t);
	while (t--) {
		LL n;
		scanf("%lld", &n);
		int s = 1, nr = 1;
		for (auto i = primes.begin(); i != primes.end(); ++i) {
			int d = *i;
			if (LL(d)*LL(d) > n)
				break;
			int e = 0;
			while (n%d == 0) {
				n /= d;
				e++;
			}
			if (e) {
				s *= int(((fexp(d, e + 1) - 1) / (d - 1)) % LL(MODNR));
				s %= MODNR;
				nr *= (e + 1);
			}
		}
		if (n != 1) {
			nr <<= 1;
			s *= int((n + 1) % LL(MODNR));
			s %= MODNR;
		}
		printf("%d %d\n", nr, s);
	}
	return 0;
}