Cod sursa(job #716554)

Utilizator miu_mik93FMI - Paduraru Miruna miu_mik93 Data 18 martie 2012 23:10:51
Problema Suma si numarul divizorilor Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include<iostream>
#include<math.h>
#include<fstream>
#include<string.h>
#include<stdio.h>
#include<assert.h>
using namespace std;
const int MAX_N = 1000000 + 1;
const int MOD = 9973;
long long n;
int eratostene[MAX_N],k = 1,is[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])
		{
			is[k] = i;
			k++;
			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 = 1; i <= k && is[i]*is[i] <= n; i++)
	{
		if(n % is[i])
			continue;
		int prod = 1, div = 0, s = 1;
		while(n % is[i] == 0)
		{
			prod *= is[i];
			prod %= MOD;
			s += prod;
			if(s > MOD)
				s -= MOD;
			n /= is[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;
}