Cod sursa(job #716181)

Utilizator miu_mik93FMI - Paduraru Miruna miu_mik93 Data 18 martie 2012 13:48:28
Problema Suma si numarul divizorilor Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include<iostream>
#include<math.h>
#include<fstream>
#include<string.h>
#include<stdio.h>
#include<assert.h>
using namespace std;
const int MAX_N = 1000005;
const int MOD = 9973;
long long n;
int eratostene[MAX_N];
void ciur()
{
	int i, j;
	for (i = 0; i <= MAX_N; i++)
		eratostene[i] = true;
	for (i = 2; i <= MAX_N; i++)
		if (eratostene[i])
		{
			for(j = i+i; j <= MAX_N; j += i)
				eratostene[j] = false;
		}
}
void function()
{
	scanf("%d",&n);
	int nr_div = 1, suma = 1;
	for(int i = 2; i <= n; i++)
	{
		if(i * i > n)
			break;
		if(n % i && eratostene[i])
			continue;
		int prod = 1, div = 0, s = 1;
		while(n % i == 0)
		{
			prod *= i;
			prod %= MOD;
			s += prod;
			if(s > MOD)
				s -= MOD;
			n /= i;
			div++;
		}
		nr_div *= (div + 1);
		suma *= s;
		suma %= MOD;
	}
	if(n != 1)
	{	nr_div *= 2;
		suma = suma * (n+1) % MOD;
	}
	cout<<nr_div<<" "<<suma<<endl;

}
int main()
{
	freopen("ssnd.in", "r", stdin);
	freopen("ssnd.out", "w", stdout);
	ciur();
	int t; scanf("%d", &t);	
	while(t--)
		function();
	fclose(stdin);
	fclose(stdout);
	return 0;
}