Cod sursa(job #1220519)

Utilizator ptquake10ptquake10 ptquake10 Data 17 august 2014 15:52:38
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <iostream>
#include <cstdio>
#include <vector>
#include <stack>
#include <queue>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <fstream>
#include <map>
using namespace std;
#define MAX 1000001

bool p[MAX];
vector<long long>pr;

void ciur() {
	int i = 2;
	while (i <= 1000) {
		while (p[i])i++;
		for (int j = i*i; j < MAX; j += i) p[j] = 1;
		i++;
	}
	for (int i = 2; i < MAX; i++)
		if (!p[i]) pr.push_back(i);
}

void desc(long long n) {
	long long s = 1, s1, d = 1, d1;
	int i = 0;
	while (i < pr.size() && pr[i] * pr[i] <= n) {
		if (n % pr[i] == 0) {
			s1 = pr[i];
			d1 = 1;
			while (n % pr[i] == 0) {
				s1 *= pr[i];
				d1++;
				n /= pr[i];
			}
			s = (s * (s1-1) / (pr[i]-1)) % 9973;
			d *= d1;
		}
		i++;
	}
	if (n != 1) {
		s = (s * (n*n-1)/(n-1)) % 9973;
		d *= 2;
	}
	cout << d << " " << s << "\n";
}

long long n;
int t;

int main() {
	
	freopen("ssnd.in","r",stdin);
	freopen("ssnd.out","w",stdout);
		
	ciur();
	
	cin >> t;

	while(t--) {
		cin >> n;
		desc(n);
	}
	
	return 0;
}