Cod sursa(job #1060997)

Utilizator federerUAIC-Padurariu-Cristian federer Data 19 decembrie 2013 00:11:55
Problema Suma si numarul divizorilor Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include<fstream>
#include<bitset>
#define Nmax 1000005
#define mod 9973
using namespace std;

ifstream fin("ssnd.in");
ofstream fout("ssnd.out");

long p[Nmax];
long nrdiv = 1, j, i, sdiv, rez;
bitset<Nmax> viz;

void ciur()
{
	int m, ii, j=1;
	p[1] = 2;
	for (i = 3; i < 1000; i += 2)
	if (!viz[i])
	{
		p[++j] = i; m = 2 * i;
		for (ii = i*i; ii <= 1000000; ii += m)p[ii] = 1;
	}
}

void putere(long b, long e)
{
	while (e)
	{
		if (e % 2 == 0)
		{
			b = (b*b)%mod;
			e /= 2;
		}
		else
		{
			rez = (rez*b)%mod;
			e--;
		}
	}
}
void div(long X)
{
	int c=0;
	nrdiv = 1;
	sdiv = i=1;
	while (X>1)
	{
		c = 0;
		rez = 1;
		int d = 1;
		while (X%p[i] == 0)
		{
			c++;
			X /= p[i];
			d = (d* p[i])%mod;
			rez = (rez + d)%mod;
		}
		
			sdiv = (sdiv*rez)%mod;
			nrdiv *= (c + 1);

		i++;
	}
}

int main()
{
	int T, N, k;
	ciur();
	fin >> T;
	for (k = 1; k <= T; ++k)
	{
		fin >> N;
		div(N);
		fout << nrdiv << ' '<< sdiv<<'\n';
	}

	return 0;
}